jdbc - Clojure jdbc - 查询单列展平结果
问题描述
我正在尝试将数据(cca 760k 行)从单列读取到一个(展平的)向量中。结果clojure.java.jdbc/query
是地图的序列,例如({:key "a"} {:key "b"} ...)
。提供选项:as-arrays? true
,[[:key] ["a"] ["b"] ...]
返回。为了使结果变平,我还使用了 option:row-fn first
并得到了[:key "a" "b" ...]
. 最后,我申请rest
摆脱:key
.
用向量包装和展开行似乎是很多不必要的工作。我对表现也不满意。有更快/更惯用的方式吗?我试过了...
(jdbc/with-db-connection [con -db-spec-]
(with-open [^Statement stmt (.createStatement (:connection con))
^ResultSet res (.executeQuery stmt query)]
(let [ret (ArrayList.)]
(while (.next res)
(.add ret (.getString res 1)))
(into [] ret))))
...但它并没有快多少,而且很丑。
编辑
更好的方法是通过传感器(见这里):
(into []
(map :key)
(jdbc/reducible-query
connection
["SELECT key FROM tbl"]
{:raw? true}))
解决方案
你可以只使用:row-fn :key
. 不确定您期望的性能,但在我的 i5 PC 上,检索 760K 记录大约需要 3 秒(基于 H2 文件的数据库)
(time
(count
(jdbc/query db ["select top 760000 key from table1"] {:row-fn :key})))
;; => 760000
"Elapsed time: 3003.456295 msecs"
推荐阅读
- python - discord.py - 如何在命令中有 2 个参数?
- spring-boot - Intellij Springboot 启动时出现问题
- css - 在标题部分下添加 div 会在浏览器上创建奇怪的幽灵空间和滚动条
- excel - Excel,两列,日期比较,特定月份
- azure-ad-b2c - 我们如何将本地帐户登录页面自定义为 Azure AD B2C 中“编辑配置文件”策略的一部分?
- sql-server - 删除 Power BI SQL Server 列上的求和
- docker - 无法从 Laravel 应用程序连接到 Redis
- python - MacOS High Sierra 10.13.6、python3.7安装安装Certificate.command导致SSLError
- apache-nifi - Nifi 通过 Rest-API 创建控制器服务
- java - 如何强制 Java 8 流按顺序执行?