Redashの使い方(エンジニア向け)
※過去にしてたインフラエンジニアの仕事を初心者向けに書き留めてます
redashのクエリ登録するときにユーザーに任意の値を入力させたい
基本 & データソースがSQL Serverの場合
例えば、商品に紐づく口コミ件数の下限を設定したい場合に、
下記のようにユーザー定義変数を宣言するとします。
SET @review_count_lower_limit = 50
redash上からユーザーがこの値を自由に設定できるようにするには、
下記コードのように書き換えると、パラメーター化することができます
# 数字として扱う場合
SET @review_count_lower_limit = {{口コミ件数の下限}}
# テキストとして扱う場合
SET @review_count_lower_limit = '{{口コミ件数の下限}}'
結果、ユーザーが自由に値を入力できるようになります。
redashではパラメータの型を設定してあげる必要があります。上の画像の歯車マークを押すと…設定ポップアップが表示されます。
Titleはパラメータのタイトル
Typeはデータの型です。下記、5つの項目から選択できます。
今回は整数を用いたいので、Numberを選択します。
Text
Number
Data
Data and Time
Data and Time (with seconds)
Globalは…後で調べます。
これでパラメーターの設定は完了です。
(WIP)データソースがMySQLの場合
基本 {{}}を用いて、パラメータ化するのは同じですが、
SELECT文外でパラメーター化すると、エラーが出ます。
# エラーの出る場合
SET @review_count_lower_limit = 50;
SELECT
hoge
FROM
huga
WHERE
huga.review_count > @review_count_lower_limit
Error: huguhugahuga
このエラーはSELECT文中に、埋め込むことで解決できます。
# エラーが出ない場合
SELECT
hoge
FROM
huga
WHERE
huga.review_count > (@from_start_at := '{{掲載開始日:開始日}}')
データソースがPrestoの場合
日付編
prestoでredashのパラメーターの「Date」方を使いたい場合、CASTでDate型に変換しなければなりません。
SELECT
hoge
FROM
huga
WHERE
huga.sales_date > CAST('{{発売日:開始}}'AS DATE))
IN句編
https://github.com/getredash/redash/issues/1211
{{{商品}}} のように3つの波かっこで囲むとHTMLエスケープされずにいける
AND sdc.code IN ({{{商品}}})
ワード編
LIKE検索の中身をパラメーターかしたいとの要望が来たら、下記のように%の間にredashパラメータを仕込むと可能です。(他のデータソースでも一緒かも)
SELECT
hoge
FROM
huga
WHERE
huga.text LIKE '%{{ワード}}%'
IN句編
複数の商品IDを同時に抽出したいという要望は、挨拶と同じくらい抽出業務では当たり前に聞く話です。prestoとredashの組み合わせの場合は以下のように記述します。
そして対象のカラムがintegerの場合はパラメーターはTEXT型で、「,」区切りで入力すると成功します。
#カラムがintegerの場合
SELECT
hoge
FROM
huga
WHERE
huga.id IN ({{ワード}})
#カラムがvarcharの場合
SELECT
hoge
FROM
huga
WHERE
huga.jan IN ('{{ワード}}')
BIT型の扱い
MySQLのBIT型のColumnを表示しようとすると何も表示されない
その場合、CASTなどを使って整数型に変換すれば正しく表示される。
redashにユーザー登録したい場合は、
※admin権限を持つ人しかできません!
redashに絞り込み用のフィルター機能をつけたい
カラム名のあとに "::filter" や "::multi-filter" を付加することで、 表示項目を絞り込むフィルタをつけることができる。
recommend AS "review::filter"
recommend AS "review::multi-filter"
「filter」と「multi-filter」の違い
・「filter」⇒ 1つの値でしか絞り込むことができない。
・「multi-filter」⇒ 複数の値で絞り込むことが可能。
同時に複数の項目に設定することが可能