用量
explore: explore_name {
sql_preamble: SQL STATEMENT ;;
}
|
階層
sql_preamble |
預設值
無
接受
SQL 運算式
|
定義
sql_preamble 參數會指定在執行「探索」中的查詢之前執行的 SQL 陳述式。sql_preamble 的主要用途是在 Google BigQuery 上建立使用者定義函式 (UDF)。大多數資料庫方言都允許您直接在資料庫伺服器上安裝 UDF,但 Google BigQuery 是無狀態的,因此 sql_preamble 提供這項功能。
在 sql_preamble 中使用 Liquid
sql_preamble 參數支援 Liquid 和使用者屬性,可動態產生 SQL,適用於設定工作階段變數、選取不同倉儲或資料庫、在 BigQuery 中實作分割區修剪,以及更直接地與基礎資料庫互動,進而彈性篩選資料等用途。
sql_preamble 參數支援下列 Liquid 使用模式:
_filters['view_name.field_name']{% date_start date_filter_name %}{% date_end date_filter_name %}{% condition filter_name %} sql_or_lookml_reference {% endcondition %}{% if %} sql_or_lookml_reference {% else %} other_value {% endif %}{% parameter parameter_name %}parameter_name._parameter_value_user_attributes['name_of_attribute']_localization['localization_key']_model._name_explore._name_explore._dashboard_url_query._query_timezoneview_name._in_queryview_name.field_name._in_queryview_name.field_name._is_selectedview_name.field_name._is_filtered_view._name
sql_preamble不支援下列 Liquid 用法:
valuerendered_valuefilterable_valuelinklinked_value_field._name
範例
使用 sql_preamble 指定 BigQuery 預留項目
在 sql_preamble 參數中使用 BigQuery SET @@reservation SQL 陳述式,指定要用於探索查詢的 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);;
...
}
這個程式碼會將 Liquid 變數替換為 語言代碼字串檔案中為鍵 storage_table_name 定義的實際字串,而不是使用 mytable 等經過硬式編碼的名稱做為臨時資料表。詳情請參閱「在 Liquid 變數中使用語言代碼」。
前言之後的 Looker 查詢會參照這個動態命名的資料表。舉例來說,SQL 查詢會使用 FROM {{ _localization['storage_table_name'] }}。