sql_trigger_value

用途

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

許可
1 つの行と 1 つの列を返す SQL ステートメント

定義

代わりに、datagroupdatagroup_trigger の使用を検討してください。これらは、クエリのキャッシングに関するドキュメント ページで説明されています。

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

sql_trigger_value パラメータは、記述した SQL の最初の行と列のみを考慮します。そのため、クエリを作成して 1 つの値(1 行と 1 列)のみを返すことを強くおすすめします。これにより、将来のデベロッパーの混乱を解消し、ストリーミング以外の SQL 言語でラージ アウトプットがメモリに読み込まれるのを防ぐことができます。

デフォルトでは、別の永続的な派生テーブルがビルドされていない限り、5 分ごとに記述した SQL クエリが実行されます。SQL クエリの結果が変更されると、派生テーブルが再生成されます。このスケジュールは、Looker の管理設定の [PDT とデータグループ メンテナンス スケジュール] 設定を使用して適宜変更できます。

たとえば、MySQL を実行していて、次のように使用したとします。

    sql_trigger_value: SELECT CURDATE() ;;

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

sql_trigger_value ランタイム sql_trigger_value の結果
2015-01-01 00:00 2015-01-01
2015-01-01 00:05 2015-01-01
2015-01-01 00:10 2015-01-01
... ...
2015-01-01 23:55 2015-01-01
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 アクション] 歯車メニューから [派生テーブルの再ビルドと実行] オプションを選択します。

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 日に 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 日に 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 日に 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 日に 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 は Development Mode と本番環境モードで動作が異なります

sql_trigger_value は本番環境モードで想定どおりに動作します。Development Mode では、実装した設定に関係なく、すべての派生テーブルが persist_for: 24 hours が使用されているかのように扱われます。詳しくは、Looker の派生テーブル ドキュメントの Development Mode の永続テーブルをご覧ください。