lookml-model について
接続、include、キャッシュ設定を扱う、LookML 開発者向けのモデルファイルガイドです。datagroup を使い、キャッシュの無効化を ETL/ELT の処理に合わせる方法を説明します。
主な機能
- 01モデル接続とラベルの設定
- 02具体的な include パターンの指定
- 03週の開始曜日の設定
- 04datagroup によるキャッシュ管理
活用シーン
- 01LookML モデルで利用するビューやダッシュボードの選択
- 02ETL/ELT の状態に応じた本番ダッシュボードのキャッシュ更新
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ looker-open-source/ looker-skills --skill lookml-modelインストール後、Claude Code で/lookml-modelを入力して読み込まれたか確認します。
詳細
手順
- モデルファイルを定義する:モデルファイルは通常、単一のデータベース接続に対応し、Explore を含みます。
- 必須パラメーター:
connection: "connection_name":Looker Admin で定義された接続と一致する必要があります。include: "pattern":モデルで使用できるビューおよびダッシュボードのファイルを指定します。
- ベストプラクティス:
- Includes:パフォーマンスの問題や名前空間の煩雑化を防ぐため、可能であれば
include: "*.view"は避けてください。include: "/views/users.view"やinclude: "/views/marketing/*.view"のような具体的なパスまたはワイルドカードを使用してください。 - ラベル:
label:を使用して、UI でモデルにわかりやすい名前を付けてください。 - 週の開始曜日:ビジネスロジックで特定の開始曜日(例:
monday)が必要な場合は、week_start_day:を設定してください。 - Datagroups とキャッシュ:Looker を ETL/ELT プロセスに合わせるため、キャッシュポリシーには必ず datagroups を使用してください。
- Includes:パフォーマンスの問題や名前空間の煩雑化を防ぐため、可能であれば
4. Datagroups とキャッシュ
Datagroups は、キャッシュポリシーを管理するための推奨メカニズムです。
- 定義:モデルファイルで定義します。
- sql_trigger:単一の値(例:最大タイムスタンプ)を返すクエリです。値が変わると、キャッシュは無効になります。
- max_cache_age:トリガーが変わらない場合の代替期間です。
- persist_with:Explore またはモデル全体に datagroup を適用します。
Datagroups と persist_for の比較
| 機能 | Datagroups(推奨) | persist_for |
|---|---|---|
| トリガー | SQL クエリ(スマート) | 固定時間(単純) |
| 整合性 | ETL/ELT の完了に合わせる | 不整合(推測に依存) |
| 管理 | モデルファイルで一元管理 | Explore/モデルに分散 |
| ユースケース | 本番ダッシュボード、ETL 同期 | アドホッククエリ、リアルタイム(<1h)のニーズ |
ヒント
X 分ごとにキャッシュを強制的に更新する必要があるリアルタイムダッシュボード(例:株価表示、動きの速い在庫)に限り、
persist_forを使用してください。それ以外では、Datagroups を使用してください。
5. Include パターン
範囲とパフォーマンスを制御するため、厳密なパターンを使用してください。
| パターン | 説明 | ユースケース |
|---|---|---|
include: "/views/*.view" | 特定のフォルダー内のすべてのビュー | 標準的なモジュール化 |
include: "/views/marketing/users.view" | 特定のファイル | 正確な制御、競合を回避 |
include: "/**/*.view" | 再帰的(プロジェクト内のすべてのビュー) | プロジェクトが小規模な場合を除き、避けてください |
include: "/dashboards/*.dashboard" | フォルダー内のすべてのダッシュボード | ダッシュボードのインポート |
例
基本的なモデル
connection: "thelook"
# Include all views in the views/ folder
include: "/views/*.view"
# Include all dashboards
include: "/*.dashboard"
# Define an Explore (usually better to define in separate files for large projects, but acceptable here for small ones)
explore: orders {
join: users {
type: left_outer
sql_on: ${orders.user_id} = ${users.id} ;;
relationship: many_to_one
}
}
特定の設定を含むモデル
connection: "snowlooker"
label: "eCommerce Analytics"
# Set valid week start day
week_start_day: monday
# Include specific folders
include: "/views/finance/*.view"
include: "/views/marketing/*.view"
Datagroup を含むモデル(ベストプラクティス)
connection: "thelook"
# Define the caching policy
datagroup: ecommerce_etl {
description: "Triggers when the max created_at date changes in the events table."
sql_trigger: SELECT MAX(created_at) FROM `project.dataset.events` ;;
max_cache_age: "24 hours" # Fallback
}
# Apply default caching to all Explores in this model
persist_with: ecommerce_etl
include: "/views/*.view"
explore: orders {
# This explore inherits 'persist_with: ecommerce_etl' from the model default
}
explore: real_time_dashboard {
# Override with a different policy if needed
persist_for: "5 minutes"
}
コメント
Markdown 対応