sql_trigger_value

使用状況

view: my_view {
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
階層
sql_trigger_value
デフォルト値
なし

許可
1 行 1 列で構成される SQL ステートメント

定義

代わりに、datagroupdatagroup_trigger を使用して検討してください。詳細については、データグループを使用したクエリのキャッシュと PDT の再構築のドキュメントをご覧ください。

sql_trigger_value を使用すると、指定した SQL ステートメントに基づいて永続的な派生テーブルを再生成できます。SQL文の結果が前の値と異なる場合、PDTが再生成されます。

sql_trigger_value パラメータでは、記述する SQL の最初の行と列のみが考慮されます。したがって、1 つの値(1 行 1 列)のみを返すようにクエリを作成することを強くおすすめします。これにより、将来のデベロッパー向けの混乱がなくなり、非ストリーミング SQL 言語が大規模な結果セットをメモリに読み込むのを防ぐことができます。

デフォルトでは、Looker はユーザーが書き込む SQL クエリを 5 分ごとに実行します(ただし、別の永続的な派生テーブルはビルドプロセス中ではありません)。SQL クエリの結果が変更されると、Looker は派生テーブルを再生成します。このスケジュールは、Looker の管理設定の PDT And Datagroup Maintenance Schedule 設定を使用して、必要に応じて変更できます。

たとえば、MySQL を実行していて、以下を使用したとします。

    sql_trigger_value: SELECT CURDATE() ;;

結果は次のようになります。

sql_trigger_value 実行時間 sql_trigger_value 結果
2015-01-01 00:00 2015年1月1日
2015-01-01 00:05 2015年1月1日
2015-01-01 00:10 2015年1月1日
2015-01-01 23:55 2015年1月1日
2015-01-02 00:00 2015-01-02
2015-01-02 00:05 2015-01-02

この SQL クエリの値は 1 日に 1 回深夜 0 時に変化するので、これらの時点に派生テーブルが再生成されます。

Looker で sql_trigger_value のタイムゾーン変換は実行されません。sql_trigger_value を使用して深夜 0 時または特定の時間に PDT の再ビルドをトリガーすると、データベースが構成されているタイムゾーンでトリガーが発生します。

管理者が develop 権限を付与している場合は、sql_trigger_value クエリが変更される前に派生テーブルを強制的に再生成できます。クエリ実行後、画面の右上に表示される Explore のプルダウン メニューから [Rebuild Derived Tables & amp; Run] オプションを選択します。

派生テーブルの再実行と実行オプションの詳細については、Looker の派生テーブルのドキュメントをご覧ください。

1 日に 1 回深夜 0 時に再構築される PDT を MySQL に作成します。

view: clean_events {
  derived_table: {
    sql:
      SELECT *
      FROM events
      WHERE type NOT IN ('test', 'staff') ;;
    sql_trigger_value: SELECT CURDATE() ;;
  }
}

以降のセクションでは、さまざまな言語のさまざまな PDT の再構築戦略に使用する SQL を示します。

Google BigQuery

希望する再生スケジュール 使用する SQL
1 日 1 回午前 0 時(太平洋時間) SELECT FORMAT_TIMESTAMP('%F', CURRENT_TIMESTAMP(), 'America/Los_Angeles')
特定の時間に 1 日 1 回 SELECT FLOOR(((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) - 60*60*3)/(60*60*24))
「3」を回復する時間に置き換える
特定の時間に 1 日 2 回 SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18 THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END
4 と 18 の部分は再生する時間で置き換えます
特定の時間に 1 日 3 回 SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9 THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18 THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END
4、9、18 の部分は再生する時間帯で置き換えます
1 時間ごと SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP())
2 時間ごと SELECT FLOOR((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) / (2*60*60))
「2」は再生ごとに必要な時間に置き換えることができます。
データを更新しない SELECT 1

MySQL

希望する再生スケジュール 使用する SQL
1 日 0 時(深夜) SELECT CURDATE()
特定の時刻(
)の 1 日 1 回調整協定世界時(UTC)
SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24))
「3」を回復する時間に置き換える
特定の時間に 1 日 2 回 SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18 THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END
4 と 18 の部分は再生する時間で置き換えます
特定の時間に 1 日 3 回 SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9 THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18 THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END
4、9、18 の部分は再生する時間帯で置き換えます
特定のテーブルの更新時 SELECT COUNT(*) FROM table
1 時間ごと SELECT HOUR(CURTIME())
2 時間ごと
協定世界時(UTC)
SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60))
「2」は再生ごとに必要な時間に置き換えることができます。
データを更新しない SELECT 1

Amazon Redshift

希望する再生スケジュール 使用する SQL
1 日 0 時(深夜) SELECT CURRENT_DATE
特定の時間に 1 日 1 回 SELECT FLOOR((EXTRACT(epoch from GETDATE()) - 60*60*3)/(60*60*24))
「3」を回復する時間に置き換える
特定の時間に 1 日 2 回 SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18 THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END
4 と 18 の部分は再生する時間で置き換えます
特定の時間に 1 日 3 回 SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9 THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18 THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END
4、9、18 の部分は再生する時間帯で置き換えます
特定のテーブルの更新時 SELECT COUNT(*) FROM table
1 時間ごと SELECT DATE_PART('hour', GETDATE())
2 時間ごと SELECT FLOOR(EXTRACT(epoch from GETDATE()) / (2*60*60))
「2」は再生ごとに必要な時間に置き換えることができます。
データを更新しない SELECT 1

PostgreSQL

希望する再生スケジュール 使用する SQL
1 日 0 時(深夜) SELECT CURRENT_DATE
特定の時間に 1 日 1 回 SELECT FLOOR((EXTRACT(epoch from NOW()) - 60*60*3)/(60*60*24))
「3」を回復する時間に置き換える
特定の時間に 1 日 2 回 SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18 THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END
4 と 18 の部分は再生する時間で置き換えます
特定の時間に 1 日 3 回 SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9 THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18 THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END
4、9、18 の部分は再生する時間帯で置き換えます
特定のテーブルの更新時 SELECT COUNT(*) FROM table
1 時間ごと SELECT DATE_PART('hour', NOW())
2 時間ごと SELECT FLOOR(EXTRACT(epoch from NOW()) / (2*60*60))
「2」は再生ごとに必要な時間に置き換えることができます。
データを更新しない SELECT 1

Snowflake

希望する再生スケジュール 使用する SQL
1 日 0 時(深夜) SELECT CURRENT_DATE()
特定の時刻(
)の 1 日 1 回調整協定世界時(UTC)
SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24))
「3」を回復する時間に置き換える
特定の時間に 1 日 2 回 SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18 THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END
4 と 18 の部分は再生する時間で置き換えます
特定の時間に 1 日 3 回 SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9 THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18 THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END
4、9、18 の部分は再生する時間帯で置き換えます
特定のテーブルの更新時 SELECT COUNT(*) FROM table
1 時間ごと SELECT HOUR(CURRENT_TIME())
2 時間ごと
協定世界時(UTC)
SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60))
「2」は再生ごとに必要な時間に置き換えることができます。
データを更新しない SELECT 1

一般的な課題

sql_trigger_value を使用するには、永続的な派生テーブルを設定する必要があります

sql_trigger_value を使用すると、データベース接続の設定で派生テーブルの永続性を有効にしている場合を除き、LookML 検証エラーが発生します。ほとんどのお客様は、最初にデータベース接続を構成するときに永続的な派生テーブルを設定します。このルールの最も一般的な例外は、Looker を PostgreSQL の読み取り専用(ホットスワップ)セカンダリに接続するお客様です。

sql_trigger_value は、開発モードと本番環境の間で動作が異なります

sql_trigger_value は、本番環境モードで想定どおりに動作します。開発モードでは、実装した設定にかかわらず、すべての派生テーブルは persist_for: 24 hours を使用した場合と同様に扱われます。詳細については、Looker の派生テーブルのドキュメント ページの開発モードでの永続テーブルをご覧ください。