您可以透過聯結功能連結不同的檢視,同時探索多個檢視的資料,並瞭解資料不同部分之間的關聯。
舉例來說,您的資料庫可能包含 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 | 是 |
Firebolt | 是 |
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 中的彙整參數,請參閱彙整參考資料說明文件。