mozilla/redash_client を使って Redash のクエリを実行する
業務では redash-dynamic-query を使う機会が多いが、Mozilla が公開している mozilla/redash_client
も試してみることにした。
少し調べたところ、Mozilla で使われている STMO という仕組みが Redash で構築されていて、その STMO のクライアントとして開発されているっぽい。
STMO は誰でもアクセスできるものというわけではなさそうだけど、 Mozilla は内部で使っているコードもすべてオープンにするようなポリシーで運営されているのかもしれない。
使ってみる
README ではクエリを検索するサンプルが紹介されているので、それを少し改変して redash-dynamic-query
でよくやるパラメータを使ったクエリの実行をやってみる。
先に断っておくと、このコードは以下の PR に含まれる変更に依存しているので、私の手元でしか動かないことはご了承いただきたい。
from pprint import pprint import pystache from redash_client.client import RedashClient api_key = os.environ["REDASH_API_KEY"] client = RedashClient(api_key) client.BASE_URL = 'https://localhost:5000/' client.API_BASE_URL = client.BASE_URL + 'api/' query = client.get_query(1) sql = pystache.render(query['query'], { 'since': '2018-04-01', 'until': '2018-04-30', }) result = client.get_query_results(sql, query['data_source_id']) pprint(result, width=160)
上記のようなコードで、 redash-dynamic-query
と同じように、クエリにパラメータをバインドして実行することができる。
モジュール内で BASE_URL
が STMO の URL でべた書きされていたりするので、内部向けコードっぽさを強く感じるが、 Mozilla の外でも使えないことはなさそう。
redash-dynamic-query との違い
パラメータつきクエリの実行に特化している実装になっている redash-dynamic-query
に対し、 mozilla/redash_client
はすべてのAPIを網羅しているわけではないが、所謂 API クライアントとして作られている。
すべてを試したわけではないが、現時点の master
ブランチでは以下のような機能を持っている。
これらの機能を使って、Mozilla では Redash as a Code みたいな感じのことをやっているのかもしれない。
ただし、先程紹介した PR のように、ID を指定したクエリの取得など、よく使いそうな機能がまだ実装されていなかったりするので、 PR を送ったりするなどして開発に参加したり、Fork して必要な機能を足すようなことが必要になるかもしれない。
また、 .travis.yml
を見る限りでは Python 2.7 での使用を想定されているためか、 Python 3 では上記で紹介したコードを動作させることはできるものの、ユニットテストは失敗する。 個人的には Python 2 を使う機会が減っているため、このあたりは少し気になる。