sql (適用於衍生資料表)

本頁面是指屬於衍生表格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_startdate_end Liquid 變數非常適合用於按日期將資料分割成多個資料表的資料庫方言,例如 BigQuery。如需深入說明,請參閱「使用 date_startdate_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,其中包含衍生資料表,並由 explorejoin 參數參照,而這些參數又由模型參照。模型會決定要使用的資料庫連線 (請參閱 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 變數參考資料」說明文件頁面。