Apache DrillでExcelを検索するプラグインを作った

ExcelをDBに入っているデータとジョインできたら便利なのでは?ということで作ってみました。

github.com

GitHubリリースページからダウンロードしたjarファイルをDRILL_HOME/jars/3rdpartyにコピーし、ストレージ設定でdfsに以下のフォーマットの設定を追加します。

  "formats": {
    "excel": {
      "type": "excel",
      "extensions": [
        "xlsx"
      ]
    },
    ...
  }

するとDrillで*.xlsxファイルをSQLで検索できる様になります。もちろんDrillでアクセス可能な他のデータソース上のテーブルとジョインすることもできます。

0: jdbc:drill:zk=local> SELECT id, name FROM dfs.`/tmp/emp.xlsx` where age > 35.0;
+----------+----------------+
|    id    |      name      |
+----------+----------------+
| takezoe  | Naoki Takezoe  |
+----------+----------------+
1 row selected (3.118 seconds)

本当はシートをテーブルとして扱うようにしたかったのですが、Drillのdfsは1ファイルを1テーブルとして扱うためこのプラグインでは1シート目のデータしか使うことができません。また、カラム名として使用するためヘッダ行を入れておく必要があるという制約があります。まあネタで作ったようなものなのでこれらの点については目を瞑っていただけると幸いですw

以前LTSV用のプラグインも作ったのですが、Drillはこの手のプラグインは本当に簡単に実装することができますね。

takezoe.hatenablog.com