🐕
Lookerの備忘録② PDTで使えるDatagroupとは。使いまわせるキャッシュ設定を管理しやすくするため
忘れてはならないDatagroupの設定
前回の続きです
Datagroupとは?
相変わらず公式ドキュメントをまとめてるだけです
DatagroupはLookerモデル内で定義する「データ更新グループ」を表す概念です。
sql_trigger_value
と似ていますが、Datagroupはデータ更新タイミングや有効期限を、複数のPDTやExploreリクエストにわたって再利用できる点が特徴です。また、Datagroupを介してPDTの更新制御を行えば、同じDatagroupに紐づくPDTは共通の更新サイクルを共有でき、運用上の管理が容易になります。
ひとつひとつにsql_trigger_value
を設定するより、名前を一意で使えるDatagrooupの方が使いやすいということです。
Datagroupの主な要素
-
trigger
:SQLクエリや特定の条件によって、Datagroupが「古くなった」と判断される条件を定義 -
max_cache_age
:このDatagroupを利用する際のキャッシュ有効期限(persist_for
のような期限指定と似た概念)
Datagroupを定義すると、derived_table
やexplore
などからdatagroup_trigger
パラメータを用いて参照できます。
Datagroup定義例
以下は、Snowflake上のテーブルWH.Schema.orders
を監視し、そのupdated_at
の最大値が変わったらDatagroupを「期限切れ」として扱う例です。
datagroup: orders_dg_24hours {
# Datagroupの名称はわかりやすい方が良いですね、使い回す前提なので
sql_trigger: SELECT MAX(updated_at) FROM WH.Schema.orders ;;
max_cache_age: "24 hours" # 24時間で期限切れとみなす
}
このDatagroupをこの記事の最初のPDT設定のコードに追加修正する。
view: orders_summary {
derived_table: {
sql:
SELECT
user_id
,COUNT(*) AS order_count
,SUM(price) AS total_revenue
FROM
WH.Schema.orders
GROUP BY 1
;;
datagroup: orders_dg_24hours #ここをDatagroupに置き換え
}
dimension: user_id {
type: number
}
measure: order_count {
type: count
sql: ${TABLE}.order_count ;;
}
measure: total_revenue {
type: sum
sql: ${TABLE}.total_revenue ;;
}
}
トリガーにするのはTimestampのカラムでいいのか?
これに関してはLookerの公式ドキュメントを参照すると、Timestampを指定しても内側での結果はDateで見てくれるみたいなので、Timestampが変わるたびにPDT構築してる?みたいなことは心配ないですね。
次は増分PDTについて
Discussion