SQL
redash
RedashDay 18

Redashのmetadataから便利な情報を取ってくる話

Redash Advent Calendar 2017 の18日目の記事を書かせていただきます。

Redashを使い出してそろそろ2年近くなりますが、
metadataに関する記事があまりなかったのでこれを機に書いて見たいと思います。

Redash Metadataとは

Redash MetadataとはRedashのインストール時にデフォルトで作られるDatabaseのことをさします。

データソース

AMIから環境を作った場合には、
NAME : postgres
PASS : redash
とかで接続できるはずです。

Dockerなどに起こした場合はそれぞれ設定しているかと思います。

何が見れるのか

テーブル一覧

テーブル名をざっと羅列して見ました。
バージョンは2.0.0で確認しています。

ここでは一つ一つの詳細については省略いたします。
たぶん誰かやってるよね?
metadataというくらいなので各種設定から、クエリ情報まで全て入っています。

ちなみに、usersにはユーザー情報、data_sourcesにはデータソースの接続情報が入っていますが、
前者のpassはhash化されていますが、後者のpassはそのままです笑
ちゃんと権限設定をして全ての人が見れる状態にはしないようにしましょう。

実践編

metadataを使ったサンプルをいくつか紹介したいと思います。

archiveしてしまったクエリをまた見たい

isArchived.sql
select
    *
from
    queries
where
    is_archived = true

なんのことはないです。
archiveしても論理削除しかしていないのでqueriesテーブルには残っています。
あとはよしなにwhere句querynameを文字列検索するなどして探してあげてください。

定期実行の分布を見たい

Refresh Scheduleを設定してあげることで簡単に定期実行ができます。
ですが、特定の時間に偏ったりするとクエリ詰まりが起きたりするので、分布のチェックをしましょう。

schedule.sql
select
    q.schedule
    ,q.name
    ,ds.name as db_name
from
    queries q
left outer join
    data_sources ds
on
    q.data_source_id = ds.id
where
    schedule != ''

スケジュールは設定されてなければ空文字、設定されていれば時間が文字列で入ってくるのでそこで判定しています。

結果(Table)
SCHEDULE NAME DB_NAME
00:00 実行時間分布 Redash Metadata
01:15 hogehogeのKPI Redash Metadata
01:30 hugahugaのKPI Redash Metadata
02:00 test1 test
02:40 tst2 test
結果(Pivot)

Pivot

こんな感じで出してあげるとわかりやすいですね。

クエリ利用チェック

全然使われていないクエリは断捨離していきましょう。
直近で実行されていないクエリを探します。

usedQuery.sql
select
    object_id as query_id
    ,q.name
    ,e.created_at as execute_time
from
    events e
left outer join
    queries as q
on
    cast(e.object_id as integer) = q.id
where
    action = 'execute'
order by
    e.created_at
結果
QUERY_ID NAME EXECUTE_TIME
2 実行時間分布 18/12/17 06:34
2 実行時間分布 18/12/17 06:35
3 test1 18/12/17 06:36
2 実行時間分布 18/12/17 06:37
2 実行時間分布 18/12/17 06:49
2 実行時間分布 18/12/17 06:50

ダッシュボードでの利用チェック

ダッシュボードからクエリに飛ぶのは簡単ですが、
クエリがどのダッシュボードで使われているかを追うのはすぐにはわかりません。
visualizationswidgetsを噛ませてどこで使われているかを検索します。

usedDashboard.sql
select
    v.id as visualization_id
    ,v.type
    ,v.query_id
    ,d.name as dashboard_naem
    ,w.dashboard_id
    ,w.id as widget_id
from
    visualizations v
left outer join
    widgets w
on
    v.id = w.visualization_id
left outer join
    dashboards d
on
    w.dashboard_id = d.id 
where
    d.name != ''
結果
VISUALIZATION_ID TYPE QUERY_ID DASHBOARD_NAEM DASHBOARD_ID WIDGET_ID
6 PIVOT 2 test board 1 1
7 TABLE 6 test board 1 2

これで古くなったクエリを削除するときにもどこで使われているかすぐ見つけられます。

サンプルは以上になります。

最後に

Redash metadata とその使い方について紹介してきました。

今回のサンプルであげていないテーブルが他にもありますし、
こんな便利な使い方あるよとかありましたらぜひコメントから教えて頂けますと幸いです。

去年のアドベントカレンダーとか半分も埋まってなくて "re:dash" いまいちなのかなぁとか思ってましたが、
気づいたら "Redash" になり今年のカレンダーも全部埋まるくらいの盛り上がりになってきましたね。
ちなみに去年はカレンダー書いてません

とても手軽に見える化できるダッシュボードツールであり、
OSSということで活発に改善も行われているのでこれからもっと利用ケースが増えていきそうです。