Apache Drillを試してみたがとてもいい!
##とりあえずこれをみて感動して欲しい。
2つのJSONファイルがあります。
{"id": 1, "name": "foo"}
{"id": 2, "name": "bar"}
{"id": 1, "point": 100}
{"id": 2, "point": 200}
Apache-Drillのシェルから下記SQLを入力すると
0: jdbc:drill:zk=local> SELECT test1.*, test2.point FROM
. . . . . . . . . . . > dfs.`/opt/drill/test1.json` test1
. . . . . . . . . . . > JOIN dfs.`/opt/drill/test2.json` test2 ON (test1.id = test2.id);
+------------+------------+------------+
| id | name | point |
+------------+------------+------------+
| 1 | foo | 100 |
| 2 | bar | 200 |
+------------+------------+------------+
2 rows selected (0.253 seconds)
SQLでJSONがJOINできた!感動!
そして、なんとDrillはJSONだけでなく、CSV,TSV,Parquetも扱える。
Hadoopファイルシステムにアクセスできるし、HBaseやHive、MongoDBに接続することもできる。
つまり1クエリで色々なデータソースのデータをテーブルと見なしてJOINしてあれやこれやしたりできるわけです!感動です!
そして簡単!ここまでなら一行も設定ファイルをいじる必要なくできました!
Apache-Drillのサイトからtar.gzを落としてきて解凍するだけ!
感動であたまがフットーしちゃいそうです!
##蛇足。HiveとImpalaで分散システムを諦めかけた話し。
将来的にログ解析で分散システムが必要になりそうだったので半年くらい前に初めてHadoop周りに手を出した。
SQLライクなクエリでHadoopにアクセスできるHiveが便利そうだと思って使ってみたが、非常にパフォーマンスが悪く愕然とした。
データが少なくてもクエリの実行にすぐに数十秒以上かかってしまう。解析システムのデバッグにも一苦労だ。
そしてパフォーマンスを求めてImpalaに手を出してみたが、JSONをうまく扱えないし、設定も面倒だし、採用は断念した。
どうしても必要な状況になるまで分散システムを念頭に置いたシステム作りは止めた方がいいのかな。そう思っていた。
が、もしかしたら、Apache Drillが僕の救世主になってくれるかもしれない。
##その他
EC2でDrillを試したい方は下記を見ておいてください。
Amazon EC2(Amazon Linux) でApache Drill 0.8.0が動かなくて困った