RedashのAzure Table StorageのQuery Runnerを作った
Redash Advent Calendar 2017 の9日目の記事になります。 作ったのがちょうど12月でまだ空きがあったのでついでに登録してみました。
使えるデータソースが多いことを理由にRedashを導入しようと動いているところですが、Azure Table Storageには対応してなかったので作りました。
作ったのは以下です。しばらくRubyとJSの仕事が続いていて、Pythonは素人レベルですがなんとかなりました。
Table Storageについて
- 安く大量にデータが格納できるらしいNoSQL
- ただのKVSってわけではなく検索クエリも使える
- 以前はストレージアカウント配下のサービスだったと思いますが、いつの間にかCosmosDB配下になっていました。
- 廉価版CosmosDBってことでいいのかな?
- 詳しくはドキュメント見てください
Query Runnerの作り方
アドベントカレンダーの前日の方がQuery Runnerの作り方を書いてくださるようなので簡単に。 それみて後で修正点いろいろ見つかりそう汗
このページと他のquery_runnerとかの実装みればなんとなくわかります。
redash/query_runner
ディストリ以下にファイル作って、
BaseQueryRunner
を継承して、対応したいサービスやミドルウェアのライブラリを使って必要なメソッドを書くだけです。
忘れがちなのは最後 register(TableStorage)
のようにクラスを登録することと、 redash/settings.py
の default_query_runners
に作ったQuery Runnerを追記することです。
あと、めんどいのは対応したいサービスやミドルウェアの型とRedashの型を合わせるところです。
TYPE_INTEGER
みたいな感じで定義されているので対応付けします。Jsonエンコードもできる必要があります。
今回のTableStorageの場合は azure.cosmosdb.table.models.EntityProperty
のオブジェクトで返ってくることがあったりそうじゃなかったり、 datetime.datetime
のJson対応でハマりました。
まとめ
RedashはPython Sqriptがあるので何でもできるけど、Query Runner作成もなんとかなる。