🐕

Lookerの備忘録② PDTで使えるDatagroupとは。使いまわせるキャッシュ設定を管理しやすくするため

2024/12/09に公開

忘れてはならない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_tableexploreなどから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