在 LookML 中使用彙整

您可以透過聯結功能連結不同的檢視,同時探索多個檢視中的資料,並瞭解資料不同部分之間的關係。

舉例來說,您的資料庫可能包含 order_itemsordersusers 資料表。您可以透過聯結,同時探索所有資料表的資料。本頁說明 LookML 中的聯結,包括特定聯結參數和聯結模式。

聯結會從「探索」開始

彙整是在模型檔案中定義,用於建立探索檢視之間的關係。彙整會將一或多個檢視區塊連結至單一探索,可直接連結,也可透過另一個彙整的檢視區塊連結。

假設有兩個資料庫資料表:order_itemsorders。為這兩個資料表產生檢視區塊後,請在模型檔案的 explore 參數下宣告一或多個檢視區塊:

explore: order_items { ... }

從「探索」order_items執行查詢時,產生的 SQL 的 FROM 子句中會顯示 order_items

SELECT ...
FROM order_items

您可以將其他資訊加入「探索」order_items。舉例來說,您可以使用下列 LookML 範例,將 orders 檢視區塊加入 order_items 探索:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
  }
}

先前顯示的 LookML 可完成兩件事。首先,您可以在探索欄位挑選器中,查看 ordersorder_items 的欄位:

「Order Items」探索包含「Order Items」檢視畫面中的欄位,以及已加入「Orders」檢視畫面中的欄位。

其次,LookML 說明如何將 ordersorder_items 聯結在一起。該 LookML 會轉換為下列 SQL:

SELECT ...
FROM order_items
LEFT JOIN orders
ON order_items.order_id = orders.id

以下各節將詳細說明這些 LookML 參數。

加入參數

加入時會使用四個主要參數:jointyperelationshipsql_on

步驟 1:啟動「探索」

首先,建立 order_items 探索:

explore: order_items { ... }

步驟 2:join

如要加入資料表,請先在檢視區塊中宣告資料表。在本範例中,假設 orders 是模型中的現有檢視區塊。

然後使用 join 參數,宣告要將 orders 檢視區塊彙整至 order_items 探索:

explore: order_items {
  join: orders { ... }
}

步驟 3:type

請考慮要執行的聯結類型。Looker 支援 LEFT JOININNER JOINFULL OUTER JOINCROSS JOIN,分別對應至 type 參數值 left_outerinnerfull_outercross

explore: order_items {
  join: orders {
    type: left_outer
  }
}

type 的預設值為 left_outer

步驟 4:relationship

定義「order_items」探索與「orders」檢視區塊之間的聯結關係。正確宣告聯結關係對 Looker 計算準確的指標非常重要。關係是從「order_items」探索orders」檢視區塊定義。可能的選項包括 one_to_onemany_to_oneone_to_manymany_to_many

在這個範例中,單一訂單可以有多個訂單項目。從「order_items」探索到「orders」檢視的關係為「many_to_one」:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
  }
}

如果聯結中未加入 relationship 參數,Looker 會預設為 many_to_one

如需正確定義聯播網 relationship 參數的其他訣竅,請參閱「正確取得 relationship 參數」。

步驟 5:sql_on

使用 sql_on 參數或 foreign_key 參數,宣告如何將 order_items 資料表和 orders 資料表彙整在一起。

sql_on 參數等同於查詢產生的 SQL 中的 ON 子句。您可以使用這個參數宣告要比對哪些欄位,以執行聯結:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
  }
}

您也可以編寫更複雜的聯結。舉例來說,您可能只想聯結 id 大於 1000 的訂單:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} AND ${orders.id} > 1000 ;;
  }
}

如要進一步瞭解這些範例中的 ${ ... } 語法,請參閱替代運算子說明文件

步驟 6:測試

前往「Order Items」探索,測試這個聯結是否正常運作。您應該會看到 order_itemsorders 的欄位。

如要進一步瞭解如何在「探索」中測試 LookML 變更,請參閱「測試探索中的欄位」。

透過其他檢視畫面加入

您可以透過另一個檢視區塊,將檢視區塊加入探索。在聯結參數範例中,您使用 order_id 欄位將 orders 聯結至 order_items。即使 usersorder_items 探索沒有共用欄位,我們可能也想將 users 檢視區塊的資料聯結至 order_items 探索。這時可以透過 orders 檢視區塊聯結。

使用 sql_on 參數或 foreign_key 參數,將 users 檢視區塊彙整至 orders 檢視區塊,而不是 order_items 探索。方法是從 orders 正確設定欄位的範圍,如 orders.user_id 所示。

以下是使用 sql_on 參數的範例:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
  }
  join: users {
    type: left_outer
    relationship: many_to_one
    sql_on: ${orders.user_id} = ${users.id} ;;
  }
}

多次加入檢視畫面

users 檢視畫面包含買方賣方的資料。如要將這個檢視畫面的資料加入 order_items,但買方和賣方資料要分開加入,您可以使用 from 參數,以不同名稱加入 users 兩次。

from 參數可讓您指定要在聯結中使用的檢視區塊,同時為聯結提供專屬名稱。例如:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
  }
  join: buyers {
    from: users
    type: left_outer
    relationship: many_to_one
    sql_on: ${orders.buyer_id} = ${buyers.id} ;;
  }
  join: sellers {
    from: users
    type: left_outer
    relationship: many_to_one
    sql_on: ${orders.seller_id} = ${sellers.id} ;;
  }
}

在這種情況下,只有買方資料會以 buyers 形式彙整,只有賣方資料會以 sellers 形式彙整。

附註:現在必須在彙整中,以別名 buyerssellers 參照 users 檢視區塊。

限制彙整中的欄位

fields 參數可讓您指定要從彙整帶入探索的欄位。根據預設,系統會匯入檢視畫面中的所有欄位。不過,您可能只想帶入部分欄位。

舉例來說,當 orders 加入 order_items 時,您可能只想透過聯結帶入 shippingtax 欄位:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
    fields: [shipping, tax]
  }
}

您也可以參照一欄位,例如 [set_a*]。每個集合都是在檢視畫面中,使用 set 參數定義。假設您在 orders 檢視畫面中定義了下列集合:

set: orders_set {
  fields: [created_date, shipping, tax]
}

您可以選擇在聯結 ordersorder_items 時,只帶入這三個欄位:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
    fields: [orders_set*]
  }
}

對稱式匯總函式

即使聯結導致扇出,Looker 也能使用「對稱匯總」功能正確計算匯總 (例如總和和平均值)。如要進一步瞭解對稱匯總,請參閱「瞭解對稱匯總」。如要瞭解對稱式匯總解決的擴散傳遞問題,請參閱SQL 擴散傳遞問題社群貼文。

必須提供主鍵

如要透過彙整取得指標 (匯總),您必須在所有經彙整的檢視表中定義主鍵。

方法是在每個檢視表的主鍵欄位定義中加入 primary_key 參數:

dimension: id {
  type: number
  primary_key: yes
}

支援的 SQL 方言

如要讓 Looker 專案支援對稱式匯總函式,資料庫方言也必須支援。下表列出最新版 Looker 中支援對稱式匯總函式的方言:

方言 是否支援?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13.x - 0.17.x
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

如果方言不支援對稱式匯總函式,在 Looker 中執行聯結時請務必小心,因為某些類型的聯結可能會導致匯總結果不準確 (例如總和和平均值)。如要瞭解這個問題和解決方法,請參閱這篇社群貼文

進一步瞭解聯結

如要進一步瞭解 LookML 中的聯結參數,請參閱聯結參考說明文件。