Re:dash では通常複数のデータソースの結果を組み合わせることはできません。
例えばBigQueryに複数のDBやログなどを集約した後に
BigQuery データソースを利用することで実現することは可能ですが、
もっと手軽に複数のデータソースを組み合わせたい場合に Python データソースを利用することで
実現することができます。
Python データソースの導入設定
Pythonデータソースはデフォルトでは無効になっています。
環境変数 REDASH_ADDITIONAL_QUERY_RUNNERSP
に redash.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
Query 4
以下は、 Re:dash 自身の Postgres のデータソースを利用し、クエリーの登録数をカウントしています。
select count(*) AS count from queries
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')