postgres DBにレコードを挿入しようとしていますが、python psycopg2とcursor.copy_fromメソッドを使用すると、約3時間かかりますが、40秒かかります。
私のコードの何が問題になっていますか。clojure.java.jdbc/ db-do-preparedを使用するのにも約3時間かかります。助けてください!
ファイルサイズは175Mで、409,854レコードあります
(defn-
str<->int [str]
(let [n (read-string str)]
(if (integer? n) n)))
(with-open [file (reader "/path/to/foo.txt")]
(try
(doseq [v (clojure-csv.core/parse-csv file)]
(clojure.java.jdbc/insert! db :records
nil
[(v 0) (v 1) (v 2) (str<->int (v 3))]))
(println "Records inserted successfully")
(Exception e
(println (.getNextException e) e))))
4年後、この問題に戻って解決策のガイドを共有することにしました。これは誰かが始めるのに役立つと確信しています。
clojure.java.jdbc / insert-multiをご覧ください!データベースの列タイプに合わせて適切に編集します
(let [from "/path/to/foo.txt"
to "/path/to/temp/foo.txt"]
(with-open [reader (io/reader from)
writer (io/writer to)]
(doall
(->> (csv/read-csv reader)
;(drop 1) ;if theres header
(map #(list (nth % 0 nil) (nth % 2 nil) (nth % 3 nil)))
(csv/write-csv writer))))
(let [fstream (slurp to)
streamarray (map #(str/split % #",")
(str/split-lines fstream))]
(clojure.java.jdbc/insert-multi! pg-db ;connection or {:datasource hk-cp}
:tbl_cdrs_da ;table name
[:origin_node_type :origin_transaction_id :da_ua_id] ;colums
streamarray))) ;array
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加