These are chat archives for scalikejdbc/ja

21st
Jul 2015
suin
@suin
Jul 21 2015 07:08

質問です!ScalikeJDBCのDSLでVALUESを複数持つINSERTクエリを実行することはできますでしょうか?

INSERT INTO `events` (`event_id`, `stream_name`, `stream_version`, `event_type`, `data`)
VALUES
    (1, 'foo', 1, 'created', X'616161'),
    (2, 'foo', 2, 'created', X'616161'),
    (3, 'foo', 3, 'created', X'616161'),
    (4, 'foo', 4, 'created', X'616161');

このようなクエリです!

が可変長引数とるようになってるので、それ使えばいいという話?
Manabu Nakamura
@gakuzzzz
Jul 21 2015 07:33
そこの可変長引数は複数カラム向けの複値用なので異なりますね。
現状、標準ではその機能無いです。
ただ
https://github.com/ponkotuy/MyFleetGirls/blob/67a62b2759643628476517065a1bb54da2cc4caf/server/app/util/scalikejdbc/BulkInsert.scala
こんな感じで書いておくと自力で拡張できたりします。
suin
@suin
Jul 21 2015 07:34
おお!ありがとうございます!試してみます!
Manabu Nakamura
@gakuzzzz
Jul 21 2015 07:34
このbulk insertの需要はもう二桁回以上問い合わせを受けてるのでもう標準に用意した方が良さそうと思っております……。
PRは随時受付中です :)
suin
@suin
Jul 21 2015 07:35
確かに…!
今500万件のINSERTをしていて、1時間くらいかかるので、数百件ごとにVALUESをまとめたら早くなるかもと試行錯誤してます^^;
Manabu Nakamura
@gakuzzzz
Jul 21 2015 07:37
500万件insertは確かにbulkでやらないとやばそうですね><
Kazuhiro Sera
@seratch
Jul 21 2015 14:30
JDBC には Batch API があるじゃないですか。数百件程度なら場合によっては insert 文の方が早かったりするけど 500 万なら batch でやるんじゃないかと。膨大なパラメータ詰め込んだ insert 文書くわけにもいかないでしょうし。