sql_preamble

用途

explore: explore_name {
  sql_preamble: SQL STATEMENT  ;;
}
階層
sql_preamble
デフォルト値
なし
許可
SQL 式

定義

sql_preamble パラメータは、Explore のクエリが実行される前に実行される SQL ステートメントを指定します。sql_preamble の主な用途は、Google BigQuery でユーザー定義関数(UDF)を作成することです。ほとんどのデータベース言語では、UDF をデータベース サーバーに直接インストールできますが、Google BigQuery はステートレスであるため、sql_preamble がこの機能を提供します。

sql_preamble で Liquid を使用する

sql_preamble パラメータは Liquid とユーザー属性をサポートしています。これにより、セッション変数の設定、さまざまなウェアハウスやデータベースの選択、BigQuery でのパーティション プルーニングの実装、基盤となるデータベースとのより直接的なやり取りによる柔軟なデータ フィルタリングなど、ユースケースで動的な SQL 生成が可能になります。

sql_preamble パラメータでは、次の Liquid の使用パターンがサポートされています。

sql_preamble では、次の Liquid の使用パターンはサポートされていません。

  • value
  • rendered_value
  • filterable_value
  • link
  • linked_value
  • _field._name

sql_preamble を使用して BigQuery 予約を指定する

sql_preamble パラメータで BigQuery SET @@reservation SQL ステートメントを使用して、Looker Explore のクエリに使用する Google BigQuery 予約を指定します。

explore: orders {
  sql_preamble:
    SET @@reservation='projects/your-project/locations/your-location/reservations/your-reservation';
}

sql_preamble を使用して一時的な中央値を追加する

Google BigQuery でユーザー定義関数(UDF)を作成します。この関数は、Google BigQuery の CREATE TEMP FUNCTION ステートメントを使用して中央値を計算し、Explore の各クエリが実行される前に中央値関数を Google BigQuery SQL に挿入します。

explore: salary {
  sql_preamble:
    CREATE TEMP FUNCTION MEDIAN(a_num ARRAY<FLOAT64>)
    RETURNS FLOAT64 AS ((
       SELECT
          AVG(num)
        FROM (
          SELECT
            row_number() OVER (ORDER BY num) -1 as rn
            , num
          FROM UNNEST(a_num) num
        )
        WHERE
          rn = TRUNC(ARRAY_LENGTH(a_num)/2)
            OR (
             MOD(ARRAY_LENGTH(a_num), 2) = 0 AND
              rn = TRUNC(ARRAY_LENGTH(a_num)/2)-1 )
    ));
  ;;
}

sql_preamble で Liquid を使用してテーブル名をローカライズする

sql_preamble で Liquid を使用して、ユーザーが選択した言語に基づいて名前が付けられた一時テーブルを作成します。これにより、単一の LookML モデルをさまざまな内部命名規則に適応させることができます。

explore: orders {
  sql_preamble: 
    WITH {{ _localization['storage_table_name'] }} AS (select * from users);;
  ...
}

このコードでは、一時テーブルに mytable などのハードコードされた名前を使用する代わりに、キー storage_table_nameロケール文字列ファイルで定義されている実際の文字列で Liquid 変数を置き換えます。詳しくは、Liquid 変数でのロケールの使用をご覧ください。

プリアンブルに続く Looker クエリは、この動的に名前が付けられたテーブルを参照します。たとえば、SQL クエリでは FROM {{ _localization['storage_table_name'] }} が使用されます。