本頁面是指屬於衍生表格的
sql參數。您也可以將
sql做為欄位的一部分,詳情請參閱sql(適用於欄位) 參數說明文件頁面。
用量
view: my_derived_table {
derived_table: {
sql:
SELECT *
FROM events
WHERE type NOT IN ('test', 'staff')
;;
...
}
}
|
階層
sql |
預設值
無
接受
SQL 區塊
|
定義
sql 可讓您指定用來產生衍生資料表的 SQL。只要 SQL 查詢是以原始 SQL 編寫,且未參照 Looker 欄位,您就可以在 sql 參數中使用任何合法的 SQL 查詢。如要進一步瞭解衍生資料表,請參閱「Looker 中的衍生資料表」說明文件頁面。
除了參照一般資料庫資料表,您也可以在 sql 中參照 LookML 檢視區塊或衍生資料表。如要指派權限,請使用:
${view_or_derived_table_name.SQL_TABLE_NAME} AS view_or_derived_table_name
這個參照中的 SQL_TABLE_NAME 是字串常值,您不需要替換成任何內容。舉例來說,如果想在 key_customer_order_facts 衍生資料表中參照名為 key_customer 的衍生資料表,可能會看到類似以下的內容:
view: key_customer_order_facts {
derived_table: {
sql:
SELECT
customer_id,
COUNT( * ) AS lifetime_orders
FROM
order
INNER JOIN
${key_customer.SQL_TABLE_NAME} AS key_customer
ON
order.customer_id = key_customer.id
GROUP BY 1
;;
}
}
使用 sql 的 Liquid 變數
您也可以搭配 sql 參數使用 Liquid 變數。您可以使用 Liquid 變數存取資料,例如欄位中的值、欄位相關資料,以及套用至欄位的篩選條件。
date_start 和 date_end Liquid 變數非常適合用於按日期將資料分割成多個資料表的資料庫方言,例如 BigQuery。如需深入說明,請參閱「使用 date_start 和 date_end 搭配日期篩選器」最佳做法頁面。
特別是 _in_query、_is_selected 和 _is_filtered Liquid 變數,可為衍生資料表新增一些有趣的功能。系統會根據查詢中是否包含欄位或篩選器,傳回 true 或 false。如要正確使用這些 true/false 值,請務必考量一些細節,詳情請參閱 Liquid 變數頁面。
舉例來說,這個衍生資料表會根據使用者選取的欄位,變更查詢的資料庫資料表:
view: dynamic_order_counts {
derived_table: {
sql:
SELECT
period, number_of_orders
FROM
{% if dates.reporting_date._in_query %}
daily_orders
{% elsif dates.reporting_week._in_query %}
weekly_orders
{% else %}
monthly_orders
{% endif %}
GROUP BY 1
;;
}
}
範例
建立 customer_order_facts 衍生資料表:
view: customer_order_facts {
derived_table: {
sql:
SELECT
customer_id,
COUNT( * ) AS lifetime_orders
FROM
order
GROUP BY 1
;;
}
}
注意事項
sql 參照的資料表必須可透過目前的連線存取
views,其中包含衍生資料表,並由 explore 或 join 參數參照,而這些參數又由模型參照。模型會決定要使用的資料庫連線 (請參閱 connection 參數說明文件頁面)。資料庫連線本身是在 Looker 的「管理」部分中定義。在 sql 參數中參照表格時,該表格必須可在相關聯的連線中存取。
使用原始 SQL (以 sql 表示),而非 Looker 欄位參照
您在衍生資料表 sql 參數中編寫的 SQL 應為原始 SQL,並參照資料庫中的基礎資料欄和資料表。且不得參照 Looker 欄位名稱或檢視區塊名稱。
在衍生資料表中使用 _filters['view_name.field_name'] 時,需要 sql_quote
定義以 SQL 為基礎的衍生資料表時,如果使用 _filters['view_name.field_name'] Liquid 變數 (值會以 SQL 形式算繪,且篩選器會傳回字串值),則需要在輸出內容周圍加上單引號。方法是加入 sql_quote Liquid 篩選器。
否則,如果您未在 Liquid 變數後方附加 | sql_quote,就會收到下列 LookML 警告:
Using "_filters[]" in Derived Table SQL without "sql_quote" is discouraged.
詳情請參閱「Liquid 變數參考資料」說明文件頁面。