TKC Works

ギジュツ的なメモ、読書感想文など

RedashのAzure Table StorageのQuery Runnerを作った

Redash Advent Calendar 2017 の9日目の記事になります。 作ったのがちょうど12月でまだ空きがあったのでついでに登録してみました。

使えるデータソースが多いことを理由にRedashを導入しようと動いているところですが、Azure Table Storageには対応してなかったので作りました。

作ったのは以下です。しばらくRubyとJSの仕事が続いていて、Pythonは素人レベルですがなんとかなりました。

github.com

Table Storageについて

  • 安く大量にデータが格納できるらしいNoSQL
  • ただのKVSってわけではなく検索クエリも使える
  • 以前はストレージアカウント配下のサービスだったと思いますが、いつの間にかCosmosDB配下になっていました。
  • 廉価版CosmosDBってことでいいのかな?
  • 詳しくはドキュメント見てください

Query Runnerの作り方

アドベントカレンダーの前日の方がQuery Runnerの作り方を書いてくださるようなので簡単に。 それみて後で修正点いろいろ見つかりそう汗

このページと他のquery_runnerとかの実装みればなんとなくわかります。

redash/query_runner ディストリ以下にファイル作って、 BaseQueryRunner を継承して、対応したいサービスやミドルウェアのライブラリを使って必要なメソッドを書くだけです。

忘れがちなのは最後 register(TableStorage) のようにクラスを登録することと、 redash/settings.pydefault_query_runners に作ったQuery Runnerを追記することです。

あと、めんどいのは対応したいサービスやミドルウェアの型とRedashの型を合わせるところです。 TYPE_INTEGER みたいな感じで定義されているので対応付けします。Jsonエンコードもできる必要があります。

今回のTableStorageの場合は azure.cosmosdb.table.models.EntityProperty のオブジェクトで返ってくることがあったりそうじゃなかったり、 datetime.datetimeJson対応でハマりました。

まとめ

RedashはPython Sqriptがあるので何でもできるけど、Query Runner作成もなんとかなる。