

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 聯結資料
<a name="joining-data"></a>

您可以使用 Amazon Quick Sight 中的聯結界面，從一或多個資料來源聯結物件。透過使用 Amazon Quick Sight 聯結資料，您可以合併不同的資料，而無需從不同的來源複製資料。

## 聯結資料集的類型
<a name="join-dataset-types"></a>

聯結會在兩個 Quick Sight *邏輯資料表*之間執行，其中每個邏輯資料表都包含如何擷取資料的資訊。在 Quick Sight 中編輯資料集時，頁面上半部的聯結圖表會將每個邏輯資料表顯示為矩形區塊。

Quick Sight 中有兩種不同類型的聯結資料集：相同來源和跨來源。當資料集沒有任何聯結，或滿足以下所有條件時，資料集被視為同來源：
+ 如果有任何邏輯資料表參考 Quick Sight 資料來源：
  + 此資料集中的所有邏輯資料表都必須參考相同的 Quick Sight 資料來源。如果兩個不同的 Quick Sight 資料來源參考相同的基礎資料庫，則不適用此選項。它必須是完全相同的 Quick Sight 資料來源。如需使用單一資料來源的詳細資訊，請參閱 [使用現有資料來源建立資料集](create-a-data-set-existing.md)。
+ 如果任何邏輯資料表是指作為父資料集的 Quick Sight 資料集：
  + 父資料集必須使用直接查詢。
  + 父資料集必須參考相同的 Quick Sight 資料來源。

如果不滿足上述條件，則資料集會被視為跨來源聯結。

## 有關聯結資料集的事實
<a name="join-faqs"></a>

同來源和跨來源資料集聯結都具有以下限制。

### 聯結資料集最多可以包含多少個資料表？
<a name="w2aac35c13c25b9b9b5"></a>

所有聯結的資料集最多可以包含 32 個資料表。

### 聯結資料最大可以是多少？
<a name="w2aac35c13c25b9b9b7"></a>

允許的聯結大小上限由使用的查詢模式與查詢引擎決定。下方的清單提供有關要聯結之資料表不同大小限制的資訊。大小限制會套用至所有合併的次要資料表。主資料表沒有聯結大小限制。
+ **相同來源資料表** – 當資料表來自單一查詢資料來源時，Quick Sight 不會對聯結大小施加限制。這不會覆寫來源查詢引擎可能已設立的聯結大小限制。
+ **跨來源資料集**：這種類型的聯結包含來自不同資料來源的資料表，這些資料來源未存放在 SPICE 中。對於這些類型的聯結，Quick Sight 會自動識別資料集中最大的資料表。所有其他次要資料表的合併大小，必須小於 1 GB。
+ **存放在 SPICE 中的資料集**：此類型的聯結包含所有擷取至 SPICE 的資料表。此聯結中所有次要資料表的合併大小不得超過 20 GB。

如需有關 SPICE 資料集大小計算的詳細資訊，請參閱[估計 SPICE 資料集的大小](spice.md#spice-capacity-formula)。

### 聯結的資料集可以使用直接查詢嗎？
<a name="w2aac35c13c25b9b9b9"></a>

同來源資料集支援直接查詢 (假設使用直接查詢沒有其他限制)。例如，S3 資料來源不支援直接查詢，因此同來源 S3 資料集仍必須使用 SPICE。

跨來源資料集必須使用 SPICE。

### 計算欄位可以在聯結中使用嗎？
<a name="w2aac35c13c25b9b9c11"></a>

所有聯結的資料集都可以使用計算欄位，但計算欄位不能在任何 "on" 子句中使用。

### 地理資料可以用於聯結嗎？
<a name="w2aac35c13c25b9b9c13"></a>

同來源資料集支援地理資料類型，但地理欄位不能在任何 "on" 子句中使用。

跨來源資料集不支援任何形式的地理資料。

如需跨資料來源聯結資料表的一些範例，請參閱 AWS 大數據部落格[上的 Amazon Quick Sight 上跨資料來源聯結](https://aws.amazon.com/blogs/big-data/joining-across-data-sources-on-amazon-quicksight/)文章。

## 建立聯結
<a name="create-a-join"></a>

使用以下程序聯結資料表供您在資料集內使用。開始之前，請先匯入或連接到您的資料。您可以在 Amazon Quick Sight 支援的任何資料來源之間建立聯結，物聯網 (IoT) 資料除外。例如，您可以在 Amazon S3 儲存貯體中新增逗號分隔值 (.csv) 檔案、資料表、檢視、SQL 查詢或 JSON 物件。

**若要新增一或多個聯結**

1. 開啟您要使用的資料集。

1. (選用) 開始之前，請決定是否要停用根據資料範例自動產生的預覽。若要關閉功能，請選擇右上角的**自動預覽**。預設情況下它是開啟的。

1. 如果您尚未選擇查詢模式，請選擇**查詢模式**。

   選擇 **SPICE** 將資料集儲存在 [SPICE](spice.md) 中，或選擇**直接查詢**以每次擷取即時資料。如果資料集包含一個或多個手動上傳的檔案，資料集將自動儲存在 SPICE 中。

   如果您選擇 **SPICE**，資料會擷取至 Quick Sight。使用該資料集的視覺化效果在 SPICE 中執行查詢，而不是在資料庫上執行查詢。

   如果您選擇**直接查詢**，則資料不會擷取到 SPICE。使用該資料集的視覺化效果在資料庫上執行查詢，而不是在 SPICE 中。

   如果您選擇**查詢模式**，請確保在聯結中設定唯一鍵 (如果適用)，以提高載入視覺化效果時的效能。

1. 在資料準備頁面上，選擇**新增資料**。

1. 在開啟的**新增資料頁面**中，選擇以下選項之一並完成下列步驟：
   + 從資料集中新增資料：

     1. 選擇**資料集**。

     1. 從清單中選取資料集。

     1. 選擇****選取。
   + 從資料來源新增資料：

     1. 選擇**資料來源**。

     1. 從清單中選取資料來源。

     1. 選擇**選取**。

     1. 從清單中選取資料表。

     1. 選擇**選取**。
   + 透過多次新增資料表來建立自我聯結。名稱後面會出現一個計數器。例如 **Product**、**Product (2)** 和 **Product (3)**。**欄位**或**篩選條件**區段內的欄位名稱附有計數器，讓您可得知特定欄位是取自資料表的哪個執行個體。
   + 選擇**上傳檔案**來新增檔案，然後選擇要聯結的檔案。

1. (選用) 選擇**使用自訂 SQL** 開啟查詢編輯器，並為 SQL 資料來源編寫查詢。

1. (選用) 新增資料後，透過選擇資料表選單圖示與每個資料表互動。透過拖放來重新排列資料表。

   出現帶有紅點的圖示表示您需要設定相應聯結。尚未設定的聯結會出現兩個紅點。若要建立聯結，請選擇第一個聯結組態圖示。

1. (選用) 若要變更現有聯結，請透過選擇兩個表之間的聯結圖示，來重新開啟**聯結組態**。

   **聯結組態**窗格開啟。在聯結介面上，指定聯結類型，以及要用來聯結資料表的欄位。

1. 畫面底部會提供選項，讓您將某個資料表中的欄位設為等於另一資料表中的欄位。

   1. 在 **Join clauses (聯結子句)** 區段，選擇各個資料表的聯結資料欄。

     (選用) 如果您選取的資料表要依據多個資料欄進行聯結，請選擇 **Add a new join clause (新增聯結子句)**。如此將使聯結子句多出一列，讓您可以指定下一組要聯結的資料欄。重複這個程序，直到您已識別兩個資料物件的所有聯結資料欄。

1. 在**聯結組態**窗格中，選擇要套用的聯結類型。如果聯結欄位是一個或兩個資料表的唯一索引鍵，請啟用唯一索引鍵設定。唯一索引鍵僅套用於直接查詢，不套用於 SPICE 資料。

   如需聯結的詳細資訊，請參閱 [聯結類型](#join-types)。

1. 選擇 **Apply (套用)** 以確認您的選擇。

   若要取消而不進行任何變更，請選擇**取消**。

1. 工作空間中的聯結圖示會變更以顯示新的關係。

1. (選用) 在**欄位**區段中，可以使用每個欄位的選單執行下列一項或多項操作：
   + **將階層**新增至地理空間欄位。
   + **包含**或**排除**欄位。
   + **編輯欄位的名稱和描述**。
   + **變更資料類型**。
   + **新增計算** (計算欄位)。
   + **限制為只有我能存取**，從而防止其他人存取。當您在已經使用的資料集中新增欄位時，這會很有用。

1. (選用) 在**篩選條件**區段，您可以新增或編輯篩選條件。如需詳細資訊，請參閱[在 Amazon Quick Sight 中篩選資料](adding-a-filter.md)。

## 聯結類型
<a name="join-types"></a>

Amazon Quick Sight 支援下列聯結類型：
+ 內部聯結
+ 左外部聯結和右外部聯結
+ 完整外部聯結

底下將深入探討各種聯結類型處理資料的方式。範例資料所使用的資料表如下，其名稱是 `widget` 和 `safety rating`。

```
SELECT * FROM safety-rating

rating_id	safety_rating
1		    A+
2		    A
3		    A-
4		    B+
5		    B

SELECT * FROM WIDGET

widget_id	   widget	safety_rating_id
1		    WidgetA		3
2		    WidgetB		1
3		    WidgetC		1
4		    WidgetD		2
5		    WidgetE
6		    WidgetF		5
7		    WidgetG
```

### 內部聯結
<a name="join-inner"></a>

當您只想查看兩個資料表之間有相符的資料時，請使用內部聯結。例如，假設您對 **safety-rating** 和 **widget** 資料表執行內部聯結。

如以下結果集所示，沒有安全評分的小工具已移除，未與任何小工具相關聯的安全評分也已移除。結果僅包含完全相符的資料列。

```
SELECT * FROM safety-rating
INNER JOIN widget
ON safety_rating.rating_id = widget.safety_rating_id

rating_id    safety_rating    widget_id    widget        safety_rating_id
3	        A-                1        WidgetA        3
1	        A+                2        WidgetB        1
1	        A+                3        WidgetC        1
2	        A                 4        WidgetD        2
5	        B                 6        WidgetF        5
```

### 左外部聯結和右外部聯結
<a name="join-left-or-right"></a>

這一類又稱為左外部聯結或右外部聯結。當您想要查看一個資料表的所有資料，以及只查看另一個資料表的相符資料列時，請使用左或右外部聯結。

透過圖形界面，您可以看到位於右側或左側的是哪個資料表。在 SQL 陳述式中，第一個資料表視為位於左側。因此，選擇左外部聯結或相對的右外部聯結，僅取決於資料表在查詢工具中的配置順序。

例如，假設您在 `safety-rating`（左側資料表） 和 `widgets`（右側資料表） 上執行左側外部聯結。在此情況下將傳回所有 `safety-rating` 資料列，並且僅傳回相符的 `widget` 資料列。結果集內呈空白之處即表示沒有相符的資料。

```
SELECT * FROM safety-rating
LEFT OUTER JOIN widget
ON safety_rating.rating_id = widget.safety_rating_id

rating_id    safety_rating    widget_id   widget          safety_rating_id
1	        A+                2        WidgetB   	1
1	        A+                3        WidgetC   	1
2	        A                 4        WidgetD   	2
3	        A-                1        WidgetA   	3
4	        B+
5	        B                 6        WidgetF   	5
```

如果您改為使用右側外部聯結，請以相同的順序呼叫資料表，因此 `safety-rating` 位於左側， `widgets`位於右側。在此情況下將僅傳回相符的 `safety-rating` 資料列，並且傳回所有 `widget` 資料列。結果集內呈空白之處即表示沒有相符的資料。

```
SELECT * FROM safety-rating
RIGHT OUTER JOIN widget
ON safety_rating.rating_id = widget.safety_rating_id

rating_id    safety_rating    widget_id   widget          safety_rating_id
3	        A-                1	WidgetA   	 3
1	        A+                2	WidgetB   	 1
1	        A+                3	WidgetC   	 1
2	        A                 4	WidgetD   	 2
                                  5       WidgetE
5	        B                 6	WidgetF   	 5
                                  7       WidgetG
```

### 完整外部聯結
<a name="join-full-outer"></a>

這一類有時簡稱外部聯結，但此用語可能是指左外部聯結、右外部聯結或完整外部聯結。為了明確其含意，本文將使用全名：完整外部聯結。

使用完整的外部聯結來查看相符的資料，以及來自兩個不相符資料表的資料。此一類型的聯結將包括兩個資料表中的所有資料列。例如，假設您對 `safety-rating` 和 `widget` 資料表執列完整外部聯結，便會傳回所有資料列。相符的資料列將彼此對齊，而所有額外的資料則納入至單獨的各列。結果集內呈空白之處即表示沒有相符的資料。

```
SELECT * FROM safety-rating
FULL OUTER JOIN widget
ON safety_rating.rating_id = widget.safety_rating_id

rating_id    safety_rating    widget_id   widget         safety_rating_id
1	        A+                2	WidgetB   	1
1	        A+                3	WidgetC   	1
2	        A                 4	WidgetD   	2
3	        A-                1	WidgetA   	3
4	        B+
5	        B                 6	WidgetF   	5
                                  5	WidgetE
                                  7	WidgetG
```