Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

Re:dash の Python データソースで複数のクエリーの結果を組み合わせる

alt

Re:dash では通常複数のデータソースの結果を組み合わせることはできません。
例えばBigQueryに複数のDBやログなどを集約した後に
BigQuery データソースを利用することで実現することは可能ですが、
もっと手軽に複数のデータソースを組み合わせたい場合に Python データソースを利用することで
実現することができます。

Python データソースの導入設定

Pythonデータソースはデフォルトでは無効になっています。

環境変数 REDASH_ADDITIONAL_QUERY_RUNNERSPredash.query_runner.python を設定しておくことで有効になります。

Docker for Mac 利用時なら

$ docker-compose up -e REDASH_ADDITIONAL_QUERY_RUNNERS="redash.query_runner.python" -d

のようにして起動すれば有効になります。
(実現方法は色々あるでしょう)

Python データソースのAPI

Pythonの実行結果をクエリーとして扱うことがます。
いくつかのAPIがサポートされています。

Supported Data Sources — Re:dash documentation

ドキュメントにこれ以上詳しい内容は載っていないので、
Re:dash のコードを読むとどんなAPIがサポートされているか把握できます。

redash/redash/query_runner/python.py - getredash/redash - GitHub

API 処理内容
add_result_column(result, column_name, friendly_name, column_type) 結果のカラム名を指定する
add_result_row(result, values) データ行を追加する
execute_query(data_source_name_or_id, query) 任意のデータソースに対して任意のクエリーを実行した結果を取得する
get_query_result(query_id) 任意の query の結果を取得する

サンプル

Query id 2 のデータと Query id 4 のデータを取得し、
それぞれを掛けた値を結果として出力します。
Query の id はURLやRe:dash自身のPostgresデータソースで確認することが可能です。

Query 2

以下は、 Re:dash 自身の Postgres のデータソースを利用し、Re:dashの操作イベント数をカウントしています。

select
  count(*) as count
from events

f:id:tbpg:20161031232834p:plain

Query 4

以下は、 Re:dash 自身の Postgres のデータソースを利用し、クエリーの登録数をカウントしています。

select
    count(*) AS count
from queries

f:id:tbpg:20161031232839p:plain

Python データソース

データソースに Python を選択し、Query id 2 のデータと Query id 4 のデータを取得し、
それぞれを掛けた値を結果として出力します。

今回のサンプルは同じデータソースを利用していますが、複数のクエリーを利用できるので他のデータソースの
結果を連携させることも可能です。

events_count = get_query_result(2)['rows'][0]['count']
queries_count = get_query_result(4)['rows'][0]['count']

result = {}
add_result_row(result, {'name': 'event', 'count': events_count})
add_result_row(result, {'name': 'query','count': queries_count})
add_result_column(result, 'name', '', 'string')
add_result_column(result, 'count', '', 'integer')

f:id:tbpg:20161031232848p:plain