用途
datagroup: datagroup_name {
max_cache_age: "24 hours"
sql_trigger: SELECT max(id) FROM my_tablename ;;
interval_trigger: "12 hours"
label: "desired label"
description: "description string"
}
|
階層
datagroup |
デフォルト値
なし
許可
データグループの識別子と、データグループのプロパティを定義するサブパラメータ。 |
定義
datagroup を使用して、Explore のキャッシュ保存ポリシーを割り当てるか、永続的な派生テーブル(PDT)の永続性戦略を指定します。異なる Explore と PDT に複数のポリシーを設定する場合は、個別の datagroup パラメータを使用して各ポリシーを指定します。
英数字とアンダースコアのみを使用して、データグループの一意の名前を指定します。他の文字は使用できません。
label: データグループのラベルを指定します(省略可)。詳しくは、このページのlabelとdescriptionのセクションをご覧ください。description: データグループの目的とメカニズムを説明するために使用できるデータグループの説明(省略可)を指定します。詳しくは、このページのlabelとdescriptionのセクションをご覧ください。
datagroup サブパラメータを使用して、キャッシングと永続性のポリシーの詳細を指定します。
max_cache_age: 期間を定義する文字列を指定します。Looker ではクエリがキャッシュされてからこの期間を過ぎると、キャッシュは無効となります。次回このクエリが発行されると、クエリはデータベースに送られ、最新の結果が取得されます。詳しくは、このページのmax_cache_ageをご覧ください。sql_trigger: 1 つの行と 1 つの列を返す SQL クエリを指定します。クエリが返した値が以前の結果と異なる場合、データグループはトリガー状態になります。詳しくは、このページのsql_triggerをご覧ください。interval_trigger: データグループをトリガーするタイム スケジュール("24 hours"など)を指定します。詳しくは、このページのinterval_triggerをご覧ください。
多くの場合、max_cache_age を sql_trigger または interval_trigger と組み合わせて使用するのが最善策です。データベースへのデータ読み込み(ETL)と一致する sql_trigger または interval_trigger の値を指定し、ETL が失敗した場合に古いデータを無効にする max_cache_age の値を指定します。max_cache_age パラメータを指定すると、データグループのキャッシュが sql_trigger または interval_trigger によって消去されない場合に、キャッシュ エントリが一定期間ごとに期限切れになります。このようにして、データグループの故障モードで、Lookerキャッシュから失効したデータが供給されるのではなく、データベースをクエリすることができます。
データグループに
sql_triggerパラメータとinterval_triggerパラメータの両方を含めることはできません。両方のパラメータを指定してデータグループを定義した場合、そのデータグループはinterval_trigger値を使用し、sql_triggerの値は無視します。sql_triggerパラメータの場合、データベースをクエリするときにデータベース リソースを使用する必要があるためです。ユーザー属性を使用して接続パラメータを指定する接続の場合、SQL クエリトリガーを使用してデータグループ キャッシュ ポリシーを定義する場合は、PDT オーバーライド フィールドを使用して個別の接続を作成する必要があります。
PDT のオーバーライドがなくても、sql_triggerではなくmax_cache_ageのみを使用してデータグループのキャッシュ保存ポリシーを定義している限り、モデルとその Explore にデータグループを使用できます。
max_cache_age
max_cache_age パラメータは、整数に続けて「seconds」、「minutes」、「hours」のいずれかが含まれる文字列を指定します。この期間は、データグループを使用する Explore クエリでキャッシュに保存された結果が使用される最大期間です。
Looker では、クエリのキャッシュが max_cache_age を超えると、キャッシュは無効になります。次回このクエリが発行されると、クエリはデータベースに送られ、最新の結果が取得されます。データがキャッシュに保存される期間については、クエリのキャッシングのドキュメント ページをご覧ください。
max_cache_age パラメータは、キャッシュが無効になるタイミングのみを定義します。PDT の再構築はトリガーしません。max_cache_age のみでデータグループを定義すると、派生テーブルがデータグループに割り当てられている場合に LookML 検証の警告が表示されます。max_cache_age パラメータのみを含むデータグループに派生テーブルを割り当てたままにすると、テーブルが最初にクエリされたときに派生テーブルがビルドされますが、派生テーブルはスクラッチ スキーマに無期限に残り、再度クエリされても再ビルドされません。特定の時間間隔で PDT を再構築する場合は、データグループに interval_trigger パラメータを追加して、PDT の再構築スケジュールを定義する必要があります。
sql_trigger
sql_trigger パラメータを使用して、1 つの行と 1 つの列を返す SQL クエリを指定します。Looker は、データベース接続の [データグループと PDT のメンテナンス スケジュール] フィールドで指定された間隔で SQL クエリを実行します。クエリが以前の結果と異なる値を返した場合、データグループはトリガー状態になります。データグループがトリガーされると、Looker は datagroup_trigger パラメータでそのデータグループが指定されている PDT を再構築します。PDT の再構築が完了すると、データグループは準備完了状態になり、Looker はそのデータグループを使用する Explore のキャッシュ結果を無効にします。
通常、sql_trigger は、新しいデータ読み込み(ETL)が発生したタイミングを示す SQL クエリを指定します。たとえば、テーブル内の max(ID) をクエリします。また、sql_trigger を使用して、特定の日時を指定することもできます。たとえば、午前 4 時を指定するには、現在の日時をクエリし、必要に応じてそのタイムスタンプに時間を追加します。
sql_trigger に関する次の重要な点に注意してください。
- データベース接続で OAuth またはユーザー属性が使用されていて、接続で PDT が無効になっている場合、
sql_triggerは使用できません。Looker では、sql_triggerパラメータで指定されたクエリを実行するために、データベースにアクセスするための静的認証情報が必要になるためです。PDT が有効になっている場合、接続で OAuth やユーザー属性などの動的認証情報が使用されている場合でも、PDT オーバーライド フィールドを使用して、PDT プロセス用の個別の静的ログイン認証情報を Looker に提供できます。ただし、PDT が無効になっている場合、接続で OAuth またはユーザー属性が使用されていると、sql_triggerクエリに必要な静的ユーザー認証情報を Looker に提供できません。 - Looker では、
sql_triggerのタイムゾーン変換は行われません。特定の時刻にデータグループをトリガーする場合は、データベースが構成されているタイムゾーンでトリガーを設定します。
データグループをトリガーする SQL クエリの設定については、sql_trigger パラメータのドキュメントの例をご覧ください。
interval_trigger
オプションの interval_trigger サブパラメータを使用すると、再構築の期間を指定できます。interval_trigger パラメータには、整数とそれに続く「seconds」、「minutes」、「hours」を含む文字列を渡します。
label と description
オプションの label サブパラメータと description サブパラメータを使用すると、カスタマイズされたラベルとデータグループの説明を追加できます。これらのサブパラメータは、ロケール文字列ファイルを使用してローカライズすることもできます。
これらのサブパラメータは、[管理者] パネルの [データベース] セクションにある [データグループ] ページに表示されます。これらの表示方法の詳細については、管理者設定 - データグループのドキュメント ページをご覧ください。
例
次の例は、datagroup のユースケースを示しています。
- 新しい結果を取得するキャッシュ ポリシーを作成する
- 毎月最終日に配信をスケジュールするデータグループを作成する
- カスケード PDT でデータグループを使用する
- モデルファイル間でデータグループを共有する
新しいデータが利用可能になったとき、または少なくとも 24 時間ごとに新しい結果を取得するキャッシュ保存ポリシーを作成する
新しいデータが利用可能になったとき、または少なくとも 24 時間ごとに新しい結果を取得するキャッシュ ポリシーを作成するには、次の操作を行います。
orders_datagroupデータグループ(モデルファイル内)を使用して、キャッシング ポリシーに名前を付けます。sql_triggerパラメータを使用して、新しいデータがあることを示すクエリselect max(id) from my_tablenameを指定します。データが更新されるたびに、このクエリは新しい数値を返します。max_cache_age設定を使用して、データが 24 時間キャッシュに保存されている場合にデータを無効にします。- オプションの
labelパラメータとdescriptionパラメータを使用して、カスタマイズされたラベルとデータグループの説明を追加します。
datagroup: orders_datagroup {
sql_trigger: SELECT max(id) FROM my_tablename ;;
max_cache_age: "24 hours"
label: "ETL ID added"
description: "Triggered when new ID is added to ETL log"
}
orders_datagroup キャッシュ ポリシーをモデル内の Explore のデフォルトとして使用するには、モデルレベルで persist_with パラメータを使用し、orders_datagroup を指定します。
persist_with: orders_datagroup
特定の Explore に orders_datagroup キャッシュ ポリシーを使用するには、explore パラメータの下に persist_with パラメータを追加して、orders_datagroup を指定します。モデルレベルでデフォルトのデータグループが指定されている場合は、explore の下の persist_with パラメータを使用して、デフォルト設定をオーバーライドできます。
explore: customer_facts {
persist_with: orders_datagroup
...
}
PDT の再構築に orders_datagroup データグループのキャッシュ ポリシーを使用するには、derived_table パラメータの下に datagroup_trigger を追加して、orders_datagroup を指定します。
view: customer_order_facts {
derived_table: {
datagroup_trigger: orders_datagroup
...
}
}
毎月最終日に配信をスケジュールするデータグループを作成する
毎月末にコンテンツ配信を送信するスケジュールを作成することもできます。ただし、月によって日数が異なります。データグループを作成して、特定月の日数に関係なく、毎月末にコンテンツ配信をトリガーできます。
SQL ステートメントを使用して、毎月末にトリガーするデータグループを作成します。
datagroup: month_end_datagroup { sql_trigger: SELECT (EXTRACT(MONTH FROM DATEADD( day, 1, GETDATE()))) ;; description: "Triggered on the last day of each month" }この例は Redshift SQL で記述されています。データベースによっては、若干の変更が必要になる場合があります。
この SQL ステートメントは、明日が属する月を返します。月の最終日には、明日は翌月になるため、データグループがトリガーされます。翌日が同じ月になる日は、データグループはトリガーされません。
新しいスケジュールまたは既存のスケジュールでデータグループを選択します。
データグループに基づくスケジュールは、そのデータグループ パラメータのすべての永続的な PDT の再生成プロセスが完了してから送信されるため、配信に最新のデータが含まれることが保証されます。
カスケード PDT でデータグループを使用する
1 つの永続的な派生テーブル(PDT)が別の定義で参照される永続的なカスケード派生テーブルの場合、データグループを使用して、カスケード PDT のチェーンの永続性戦略を指定できます。
たとえば、user_facts_etl というデータグループと user_stuff という Explore を定義するモデルファイルの一部を次に示します。user_stuff Explore は user_facts_etl データグループで永続化されます。
datagroup: user_facts_etl {
sql_trigger: SELECT max(ID) FROM etl_jobs ;;
}
explore: user_stuff {
persist_with: user_facts_etl
from: user_facts_pdt_1
join: user_facts_pdt_2 {
...
}
...
}
user_stuff Explore は、user_facts_pdt_1 ビューを user_facts_pdt_2 ビューと結合します。これらのビューはどちらも、永続性トリガーとして user_facts_etl データグループを使用する PDT に基づいています。user_facts_pdt_2 派生テーブルは user_facts_pdt_1 派生テーブルを参照しているため、これらはカスケード PDT です。これらの PDT のビューファイルから LookML の一部を次に示します。
view: user_facts_pdt_1 {
derived_table: {
datagroup_trigger: user_facts_etl
explore_source: users {
column: customer_ID {field:users.id}
column: city {field:users.city}
...
}
}
}
view: user_facts_pdt_2 {
derived_table: {
sql:
SELECT ...
FROM ${users_facts_pdt_1.SQL_TABLE_NAME} ;;
datagroup_trigger: user_facts_etl
}
}
カスケード PDT がある場合は、PDT に矛盾するデータグループ キャッシング ポリシーがないことを確認する必要があります。
Looker リジェネレータは、ステータスをチェックし、次のようにこれらの PDT の再構築を開始します。
- デフォルトでは、Looker リジェネレータはデータグループの
sql_triggerクエリを 5 分ごとにチェックします(Looker 管理者は、データベース接続の [データグループと PDT のメンテナンス スケジュール] 設定を使用して、この間隔を指定できます)。 sql_triggerクエリから返された値が、前回のチェックでのクエリの結果と異なる場合、データグループはトリガー状態になります。この例では、etl_jobsテーブルに新しいID値がある場合、user_facts_etlデータグループがトリガーされます。user_facts_etlデータグループがトリガーされると、Looker リジェネレータは、そのデータグループを使用するすべての PDT(つまり、datagroup_trigger: user_facts_etlで定義されたすべての PDT)を再構築します。この例では、リジェネレータはuser_facts_pdt_1を再構築してから、user_facts_pdt_2を再構築します。PDT が同じ
datagroup_triggerを共有している場合、リジェネレーターは依存関係の順序で PDT を再構築します。最初に、他のテーブルから参照されるテーブルをビルドします。Looker がカスケード派生テーブルを再構築する方法については、Looker の派生テーブルのドキュメント ページをご覧ください。リジェネレータがデータグループ内のすべての PDT を再構築すると、リジェネレータは
user_facts_etlデータグループをトリガー状態から外します。user_facts_etlデータグループがトリガー状態ではなくなると、Looker はuser_facts_etlデータグループを使用するすべてのモデルと Explore(つまり、persist_with: user_facts_etlで定義されているすべてのモデルと Explore)のキャッシュをリセットします。この例では、Looker はuser_stuffExplore のキャッシュをリセットします。user_facts_etlデータグループに基づくスケジュールされたコンテンツ配信が送信されます。この例では、user_stuffエクスプローラからのクエリを含むスケジュール設定された配信がある場合、スケジュール設定されたクエリはデータベースから取得され、最新の結果が取得されます。
モデルファイル間でデータグループを共有する
この例では、複数のモデルファイルでデータグループを共有する方法を示します。このアプローチの利点は、データグループを編集する必要がある場合に、1 か所だけ編集すれば、その変更がすべてのモデルに反映されることです。
データグループを複数のモデルファイルと共有するには、まずデータグループのみを含む別のファイルを作成し、include パラメータを使用して、モデルファイル内のデータグループ ファイルを include します。
データグループ ファイルの作成
データグループを格納する別の .lkml ファイルを作成します。.lkml データグループ ファイルは、別の .lkml Explore ファイルを作成するのと同じ方法で作成できます。
この例では、データグループ ファイルの名前は datagroups.lkml です。
datagroup: daily {
max_cache_age: "24 hours"
sql_trigger: SELECT CURRENT_DATE();;
}
モデルファイルにデータグループ ファイルを含める
データグループ ファイルを作成したので、両方のモデルで include を使用し、persist_with を使用して、モデル内の個々の Explore にデータグループを適用するか、モデル内のすべての Explore にデータグループを適用します。
たとえば、次の 2 つのモデルファイルは両方とも datagroups.lkml ファイルを include します。
このファイルの名前は ecommerce.model.lkml です。daily データグループは explore レベルで使用されているため、orders Explore にのみ適用されます。
include: "datagroups.lkml"
connection: "database1"
explore: orders {
persist_with: daily
}
次のファイルの名前は inventory.model.lkml です。daily データグループは model レベルで使用されるため、モデルファイル内のすべての Explore に適用されます。
include: "datagroups.lkml"
connection: "database2"
persist_with: daily
explore: items {
}
explore: products {
}