はじめに
Cassandraを使っていて一括で大量にデータをinsertしたいケースがありました。
Cassandra標準のcqlshを使うと、かなりの時間がかかったため、マルチスレッドで一括データ投入できるコマンドを作りました。
このコマンドは前に記事を書いたGolangとcobraを使って実装しています。
[Golang]cobraを使って本格的なCLIを作る
インストール
https://github.com/ken-aio/execql
ここにおいてあります。
golangがあればgo getコマンドで、なければバイナリをダウンロードすることで利用可能です。
デモ
使っているコマンドのログをはっておきます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
$ execql -k test-keyspace -f /path/to/exec.cql -n 10 -t 20
2019/01/27 00:02:50 Reading input cql file... /Users/s-akiho/Downloads/cql
2019/01/27 00:02:50 Complete reading input cql file
2019/01/27 00:02:50 Creating cassandra session...
2019/01/27 00:03:00 Complete creating cassandra session
2019/01/27 00:03:00 Execute CQL...
#0(227) 99% [===================================================================================================================================================================================================================] 7s
#1(227) 99% [===================================================================================================================================================================================================================] 6s
#2(227) 99% [===================================================================================================================================================================================================================] 7s
#3(227) 99% [===================================================================================================================================================================================================================] 7s
#4(227) 99% [===================================================================================================================================================================================================================] 6s
#5(227) 99% [===================================================================================================================================================================================================================] 6s
#6(227) 99% [===================================================================================================================================================================================================================] 6s
#7(227) 99% [===================================================================================================================================================================================================================] 6s
#8(227) 99% [===================================================================================================================================================================================================================] 6s
#9(227) 99% [===================================================================================================================================================================================================================] 7s
#10(227) 99% [==================================================================================================================================================================================================================] 7s
#11(227) 99% [==================================================================================================================================================================================================================] 7s
#12(227) 99% [==================================================================================================================================================================================================================] 6s
#13(227) 99% [==================================================================================================================================================================================================================] 6s
#14(227) 99% [==================================================================================================================================================================================================================] 7s
#15(227) 99% [==================================================================================================================================================================================================================] 6s
#16(227) 99% [==================================================================================================================================================================================================================] 6s
#17(227) 99% [==================================================================================================================================================================================================================] 6s
#18(227) 99% [==================================================================================================================================================================================================================] 6s
#19(224) 99% [==================================================================================================================================================================================================================] 6s
2019/01/27 00:03:07 Complete execute CQL
|
基本的にバッチ実行になるので、どれくらいのcqlが完了したか、進捗を表示するようにしています。
進捗の表示については multibar というpluginを使わせていただきました。
非常によくできており、multibarを使うと簡単に進捗を表示することができました。
使い方
基本的にはコネクション数とスレッド数を指定して実行したいCQLが書いてあるファイルを指定するとバッチ実行できます。
詳細はcobraが作ってくれたhelpを参照すると使い方がわかります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
$ execql -h
execute cql command
Usage:
execql [flags]
execql [command]
Available Commands:
help Help about any command
version All software has versions. This is Goenum's.
Flags:
-f, --file string cql file path (required)
-h, --help help for execql
-H, --host string cassandra host. split ',' if many host. e.g.) cassandra01, cassandra02 (default "localhost")
-k, --keyspace string exec target keyspace (required)
-n, --num-conns int connection nums (default 10)
-p, --password string connection password
-P, --port int cassandra port (default 9042)
-t, --thread int concurrent query request thread num (default 1)
--timeout int query timeout(ms) (default 60000)
-u, --user string connection user
|
まとめ
cobraを使ってCLIを作ってみました。
非常に使いやすくて簡単にやりたいコマンドを作ることができました。
これからも何かコマンドラインを作りたかったら活用させていただきます。