您可以透過聯結功能連結不同的檢視,同時探索多個檢視的資料,並瞭解資料不同部分之間的關聯。
舉例來說,您的資料庫可能包含 order_items、orders 和 users 資料表。您可以使用聯結,同時探索所有資料表的資料。本頁說明 LookML 中的聯結,包括特定聯結參數和聯結模式。
加入「探索」功能
聯結是在模型檔案中定義,用於建立「探索」與「檢視」之間的關係。聯結會將一或多個資料檢視直接或透過其他已聯結的資料檢視,連結至單一「探索」。
假設有兩個資料庫資料表:order_items 和 orders。為兩個資料表產生檢視區塊後,請在模型檔案的 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 可完成兩件事。首先,您可以在「探索」欄位挑選器中,查看 orders 和 order_items 的欄位:

其次,LookML 說明如何將 orders 和 order_items 聯結在一起。該 LookML 會轉譯為下列 SQL:
SELECT ...
FROM order_items
LEFT JOIN orders
ON order_items.order_id = orders.id
以下各節將詳細說明這些 LookML 參數。
彙整參數
用於聯結的四個主要參數為:join、type、relationship 和 sql_on。
步驟 1:啟動探索
首先,建立 order_items 探索:
explore: order_items { ... }
步驟 2:join
如要加入資料表,請先在檢視區塊中宣告資料表。在本例中,假設 orders 是模型中的現有檢視區塊。
然後使用 join 參數,宣告要將 orders 檢視畫面加入 order_items 探索:
explore: order_items {
join: orders { ... }
}
步驟 3:type
請考慮要執行的彙整類型。Looker 支援 LEFT JOIN、INNER JOIN、FULL OUTER JOIN 和 CROSS JOIN。這些值對應於 left_outer、inner、full_outer 和 cross 的 type 參數值。
explore: order_items {
join: orders {
type: left_outer
}
}
type 的預設值為 left_outer。
步驟 4:relationship
定義「order_items 探索」和「orders 檢視畫面」之間的聯結關係。正確宣告聯結關係對 Looker 計算準確的指標非常重要。這項關係是從「探索」order_items到「檢視」orders所定義。可能選項為 one_to_one、many_to_one、one_to_many 和 many_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} ;;
}
}
您也可以編寫更複雜的聯結。舉例來說,您可能只想彙整訂單數量大於 1000 的訂單:id
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_items 和 orders 的欄位。

如要進一步瞭解如何在「探索」中測試 LookML 變更,請參閱「測試『探索』中的欄位」。
透過其他檢視畫面加入
您可以透過其他檢視畫面,將檢視畫面加入探索。在彙整參數範例中,您使用 order_id 欄位將 orders 彙整至 order_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 形式彙整。
注意:現在必須在聯結中,以別名 buyers 和 sellers 參照 users 檢視區塊。
限制聯結中的欄位
fields 參數可讓您指定要從聯結帶入探索的欄位。根據預設,系統會匯入檢視畫面中的所有欄位。不過,您可能只想帶入部分欄位。
舉例來說,當 orders 加入 order_items 時,您可能只想透過聯結帶入 shipping 和 tax 欄位:
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]
}
您可以選擇在將 orders 加入 order_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 也能使用「對稱匯總」功能正確計算匯總 (例如總和和平均值)。如要進一步瞭解對稱匯總,請參閱「瞭解對稱匯總」。如要瞭解對稱式匯總解決的扇出問題,請參閱這篇社群貼文。
必須提供主鍵
如要透過聯結取得指標 (匯總),您必須在所有參與聯結的檢視區塊中定義主鍵。
方法是在每個檢視表的主鍵欄位定義中加入 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+ | 否 |
| 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 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 中的彙整參數,請參閱彙整參考資料說明文件。