このエントリーをはてなブックマークに追加

はじめに

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を作ってみました。
非常に使いやすくて簡単にやりたいコマンドを作ることができました。
これからも何かコマンドラインを作りたかったら活用させていただきます。