Apache Drill で MySQL にクエリを投げてみる

LINEで送る
Pocket

本記事は Apache Drill Advent Calendar 13日目の記事です。

Apache Drill 1.2 からRDBMSへの接続がサポートされました。1.3 では MySQL, PostgreSQL, Oracle Database, SQL Server がサポートされています。
今回は Apache Drill で MySQL に接続するまでの手順を確認してみます。

ミドルウェアのバージョン
MySQL: 5.1.37(mysql-connector-java-5.1.37-bin.jar)
Apache Drill: 1.3
※ 事前に MySQL に localhost からログイン出来ることを確認してください。

まずは MySQL の JDBC コネクタをダウンロードします。
mysql-connector-java-5.1.37-bin.jar

ダウンロードが完了したら

[DRILL INSTALL]/jars/3rdparty

にコピーして下さい。
もしクラスタ環境の場合は全ノードにコピーする必要があります。

コピーしたら Apache Drill の管理コーンソールに入り、Storage Pluing のタブを選択します。
「New Storage Plung」にお好きなコネクタ名を入力して”create”ボタンを押下します。

そして下記のように記入して下さい。
ここで構文間違い等あると入力が全て消えてしまうので事前にエディタなどに下書きをしてから入力するのがおすすめ。

{
"type": "jdbc",
"driver": "com.mysql.jdbc.Driver",
"url": "jdbc:mysql://localhost:3306",
"username": "root",
"password": "mypassword",
"enabled": true
}

※ username/password はご自身の環境に書き換えて下さい。

入力したら “create” を押してpluginの設定は完了です。

よく出るエラーとしては下記の2つがありますが、構文間違いか対象のDBに接続できないことが考えられます。
構文についてはサンプルと Apache Drill のドキュメントを参考に間違いがないか確認して下さい。
2つ目のエラーは RDB にアクセスする URL や ポート、ユーザ名、パスワードが有効か確認して下さい。

  1. error (invalid JSON mapping)
  2. error (unable to create/ update storage)

embedded モードを使用している場合も同じエラーが出る場合がありますが、drill-override.conf に下記の行を追加して下さい。

 # vi [DRILL INSTALL]/conf/drill-override.conf drill.exec.sys.store.provider.local.path = [DRILL INSTALL]/jars/3rdparty" 

これでMySQL に接続する設定は完了しました。
早速確認してみましょう。
うまく接続されていれば mysql というスキーマが確認できるはずです。

$ sqlline
apache drill 1.3.0
"this isn't your grandfather's sql"
0: jdbc:drill:> show schemas;
+---------------------------+
| SCHEMA_NAME |
+---------------------------+
| INFORMATION_SCHEMA |
| cp.default |
| dfs.default |
| dfs.root |
| dfs.tmp |
| mysql.information_schema |
| mysql.test |
| mysql |
| sys |
+---------------------------+
9 rows selected (2.307 seconds)

簡単な select 文を投げてみましょう。
mysql.[DB Name].[Table Name] という形で from 句を指定します。

0: jdbc:drill:> select * from mysql.test.`sample`;
+-----+---------+-----+-----+-----+-----+-----+------------------------+------------------------+
| id | c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 |
+-----+---------+-----+-----+-----+-----+-----+------------------------+------------------------+
| 1 | hoge | 2 | 3 | 4 | 5 | 6 | 0007-07-07 00:00:00.0 | 2015-12-11 01:35:19.0 |
| 12 | coumme | 3 | 4 | 5 | 6 | 7 | 0007-07-07 00:00:00.0 | 2015-12-11 07:45:41.0 |
+-----+---------+-----+-----+-----+-----+-----+------------------------+------------------------+
2 rows selected (0.41 seconds)

ここまでで MySQL の接続は完了です。
その他のRDB と接続をする場合は Apache Drill のドキュメントサイトを参考にして下さい。
RDBMS Storage Plugin

MySQL はDB名を from 句で指定できるのですが、 postgresql ではStorage Plugin 作成時にDB名を指定する必要があります。
複数のDBとの接続が必要な場合、都度 Storege Plugin を作る必要がある点には注意が必要です。

次回は CSV と MySQL の join について記事を書く予定です。

ごきげんよう

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です