tl;dr;
redash API で パラメータを動的に変えてクエリを受け付ける方法を紹介します。
サードパーティを使わず行います。今回の version は redash v6ですがおそらくそれ以降でも可能かと思います。
手順をご紹介する前の前提条件
私の環境では検証環境としてすぐ起動できる redash の環境を利用します。
# git clone
git clone https://github.com/GitSumito/redash-blue.git
cd redash-blue
# DB 初期化
docker-compose run --rm server create_db docker-compose up
# 起動
docker-compose up -d
http://127.0.0.1/ へ接続し、データソースの設定などを適宜行います。
DBのcredential 情報などは下記をご覧ください。
https://github.com/GitSumito/redash-blue/blob/master/README.md
動的クエリを作成する
その後、 Create -> Query に移動し、変数を受け付けるカラムを書きます。
この場合はクエリを code という引数で受け取ります。
code に JPN といれると、redash が where ContryCode = "JPN"
と組み立ててくれる仕組みです。
これをブラウザからではなく、RestFull API で行うようにするというのが今回の趣旨です。
作成した Query は publish してください、
事前準備
ユーザーのAPI keyを確認します。
http://127.0.0.1/users/1
を開けばAPI keyを確認することができます。
このAPI keyを確認します。
ジョブを登録する
引数は p_xxxx というパラメータ名で受け付けるようです。
code という引数を設定したので、今回は p_code というパラメータ名になりました。
これを POST で送ります。curl コマンドで行うとやりやすいかと思います。
curl --request POST \
--url 'http://127.0.0.1/api/queries/1/refresh?p_code=IND' \
--header 'Authorization: Key ajxxxxxxxxxxxxxxx'
受け付けられると、 以下のようなレスポンスが返ってきます。
ID を控えてください。今回登録したジョブを、以下のIDを用いて確認することができます。
query_result_id を確認する
ジョブのIDをパスパラメータとして渡します。
また、api_keyを後ろにつけてください。
curl "http://127.0.0.1/api/jobs/93452aa6-8569-43fc-b816-cb441ce80e03?api_key=ajxxxxxxxxxxxxxxx"
query_result_id が返ってきます。こちらを用いて結果を確認します。
query_result_id を用いて結果を確認する
curl -s -H 'Authorization:Key ajxxxxxxxxxxxxxxx' -H 'Accept:application/json' -H 'Content-Type:application/json' http://127.0.0.1/api/query_results/8
以下の通り、ContryCode `IND`の情報を取得することができました。
今回の version は redash v6ですがおそらくそれ以降でも可能かと思います。