mozilla/redash_client を使って Redash のクエリを実行する

業務では redash-dynamic-query を使う機会が多いが、Mozilla が公開している mozilla/redash_client も試してみることにした。

github.com

少し調べたところ、Mozilla で使われている STMO という仕組みが Redash で構築されていて、その STMO のクライアントとして開発されているっぽい。

STMO は誰でもアクセスできるものというわけではなさそうだけど、 Mozilla は内部で使っているコードもすべてオープンにするようなポリシーで運営されているのかもしれない。

使ってみる

README ではクエリを検索するサンプルが紹介されているので、それを少し改変して redash-dynamic-query でよくやるパラメータを使ったクエリの実行をやってみる。

先に断っておくと、このコードは以下の PR に含まれる変更に依存しているので、私の手元でしか動かないことはご了承いただきたい。

github.com

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 ブランチでは以下のような機能を持っている。

  • クエリの検索・作成・実行・削除・更新・フォーク
  • クエリスケジュールの更新
  • ビジュアリゼーションの作成・削除・URL取得
  • ダッシュボードの作成・公開・ビジュアリゼーションの追加・URL取得

これらの機能を使って、Mozilla では Redash as a Code みたいな感じのことをやっているのかもしれない。

ただし、先程紹介した PR のように、ID を指定したクエリの取得など、よく使いそうな機能がまだ実装されていなかったりするので、 PR を送ったりするなどして開発に参加したり、Fork して必要な機能を足すようなことが必要になるかもしれない。

また、 .travis.yml を見る限りでは Python 2.7 での使用を想定されているためか、 Python 3 では上記で紹介したコードを動作させることはできるものの、ユニットテストは失敗する。 個人的には Python 2 を使う機会が減っているため、このあたりは少し気になる。