タダです.
redash のデータソースとして Python を使ってみる機会があったので,この記事にまとめていきます.なお,redash のバージョンは 8.0.0+b32245
で確認しています.
Python をデータソースに追加
デフォルトでは,データソースに Python がないため追加の設定が必要です.自分の確認環境は EC2 の AMI を使っているため /opt/redash/env
に下記の記述を追記後,docker-compse up -d
で起動し直せばデータソースに Python が追加されます.
REDASH_ADDITIONAL_QUERY_RUNNERS=redash.query_runner.python
追加されたデータソース画面
データソース追加後のコードを書いてみる
別々のクエリの結果をテーブル表示したいみたいな場合は下記のようなコードで表示できました.この場合は ALB のログの中から0.5秒以上のログと全件のログを出して表示させるみたいなことができます.
queryResults1 = execute_query('データソース名',"SELECT COUNT(*) FROM alb_logs WHERE url LIKE '%/hoge/hoge?%' target_processing_time >= 0.5 AND target_status_code != '-'") queryResults2 = execute_query('データソース名',"SELECT COUNT(*) FROM alb_logs WHERE url LIKE '%/hoge/hoge?%' AND target_status_code != '-'") results = {} for rows1 in queryResults1['rows']: for rows2 in queryResults2['rows']: add_result_row(result, { 'over': rows1['_col0'], 'all': rows2['_col0'] }) break add_result_column(result, 'all', '', 'string') add_result_column(result, 'over', '', 'string')
クエリ結果
また, 上記のクエリを複数保存していたのを合体して表にさせることも下記のようなクエリでできます.
queryResults1 = get_query_result(redash のクエリ ID) queryResults2 = get_query_result(redash のクエリ ID) results = {} for rows1 in queryResults['rows']: add_result_row(result, { 'over': rows1['over'], 'all': rows1['all'] }) for rows2 in queryResults2['rows']: add_result_row(result, { 'over': rows2['over'], 'all': rows2['all'] }) add_result_column(result, 'all', '', 'string') add_result_column(result, 'over', '', 'string')
クエリ結果
まとめ
redash のデータソースとして Python を使うことがあったのでまとめました.SQL だけでなく Python のコードを書いてデータを集計したりできるのは redash の特徴だと思いますので,今後も適宜使っていきます!