Я пытаюсь прочитать данные (около 760 тыс. Строк) из одного столбца в один (плоский) вектор.Результатом clojure.java.jdbc/query
является последовательность карт, например, ({:key "a"} {:key "b"} ...)
.При наличии опции :as-arrays? true
возвращается [[:key] ["a"] ["b"] ...]
.Чтобы сгладить результат, я также использовал опцию :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}))