

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

# 列出分析規則
<a name="analysis-rules-list"></a>

在 中 AWS Clean Rooms，*清單分析規則*會輸出其新增至的已設定資料表與可查詢之成員的已設定資料表之間的重疊資料列層級清單。可查詢的成員會執行包含清單分析規則的查詢。

清單分析規則類型支援使用擴充和對象建置等案例。

如需此分析規則預先定義查詢結構和語法的詳細資訊，請參閱 [列出分析規則預先定義的結構](#intersection-list-params-template)。

中定義的清單分析規則參數[列出分析規則 - 查詢控制項](#parameters-list-query-controls)具有查詢控制項。其查詢控制項包含選取可在輸出中列出的資料欄的功能。查詢需要至少有一個與成員所設定資料表的聯結，該成員可以直接或暫時進行查詢。

沒有像[彙總分析規則](analysis-rules-aggregation.md)一樣的查詢結果控制項。

清單查詢只能使用數學運算子。他們無法使用其他函數 （例如彙總或純量）。

**Topics**
+ [列出查詢結構和語法](#list-query-controls)
+ [列出分析規則 - 查詢控制項](#parameters-list-query-controls)
+ [列出分析規則預先定義的結構](#intersection-list-params-template)
+ [列出分析規則 - 範例](#list-example)

## 列出查詢結構和語法
<a name="list-query-controls"></a>

具有清單分析規則之資料表的查詢必須遵循下列語法。

```
--{{select_list_expression}}
SELECT DISTINCT column_name [[AS] column_alias ] [, ...] 

--{{table_expression}}
FROM table_name [[AS] table_alias ]
  [[INNER] JOIN table_name [[AS] table_alias] ON join_condition] [...]

--{{where_expression}}
[WHERE where_condition]          

--{{limit_expression}}
[LIMIT number]
```

下表說明上述語法中列出的每個表達式。


| 表達式 | 定義 | 範例 | 
| --- | --- | --- | 
| {{select\_list\_expression}} |  以逗號分隔的清單，包含至少一個資料表資料欄名稱。 需要 `DISTINCT` 參數。  `select_list_expression` 可以使用或不使用 `AS` 參數來別名資料欄。 如需詳細資訊，請參閱 [AWS Clean Rooms SQL 參考](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html)。   |  `SELECT DISTINCT segment`  | 
| {{table\_expression}} |  資料表或資料表的聯結，`join_condition`搭配 將其連接到 `join_condition`。 `join_condition` 傳回布林值。 `table_expression` 支援： [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/clean-rooms/latest/userguide/analysis-rules-list.html)  |  <pre>FROM consumer_table <br />INNER JOIN provider_table<br />ON<br />consumer_table.identifier1 = provider_table.identifier1<br />AND<br />consumer_table.identifier2 = provider_table.identifier2</pre>  | 
| {{where\_expression}} | 傳回布林值的條件式表達式。它可以包含下列項目：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/clean-rooms/latest/userguide/analysis-rules-list.html)支援的比較條件為 (`=, >, <, <=, >=, <>, !=, NOT, IN, NOT IN, LIKE, IS NULL, IS NOT NULL`)。支援的邏輯運算子為 (`AND, OR`)。`where_expression` 為選用。 |  `WHERE state + '_' + city = 'NY_NYC'` `WHERE timestampColumn = timestampColumn2 - 14`   | 
| {{limit\_expression}} |  此表達式必須採用正整數。 `limit_expression` 為選用。  |  `LIMIT 100`  | 

對於清單查詢結構和語法，請注意下列事項：
+ 不支援 SELECT 以外的 SQL 命令。
+ 不支援子查詢和常用資料表表達式 （例如 WITH)
+ 不支援 HAVINGBY、 GROUP 和 ORDER BY子句
+ 不支援 OFFSET 參數

## 列出分析規則 - 查詢控制項
<a name="parameters-list-query-controls"></a>

透過清單查詢控制項，您可以控制資料表中的資料欄用於查詢資料表的方式。例如，您可以控制哪些資料欄用於聯結，或哪些資料欄可用於 SELECT 陳述式和WHERE子句。

以下各節說明每個控制項。

**Topics**
+ [聯結控制項](#list-controls-join-controls)
+ [列出控制項](#list-controls)

### 聯結控制項
<a name="list-controls-join-controls"></a>

使用*聯結控制項*，您可以控制資料表如何聯結至 **table\_expression** 中的其他資料表。 AWS Clean Rooms 僅支援 INNER JOIN。在清單分析規則中，至少需要一個 INNER JOIN，而且可以查詢的成員需要在 INNER JOIN 中包含他們擁有的資料表。這表示他們必須直接或暫時加入您的資料表。

以下是可轉移性的範例。

```
ON 
my_table.identifer = third_party_table.identifier 
.... 
ON 
third_party_table.identifier = member_who_can_query_table.id
```

INNER JOIN 陳述式只能使用在您的分析規則`joinColumn`中明確歸類為 的資料欄。

INNER JOIN 必須在`joinColumn`您設定的資料表和協同合作中`joinColumn`另一個設定的資料表的 上操作。您可以決定資料表中的哪些資料欄可以用作 `joinColumn`。

子ON句中的每個相符條件都需要使用兩個資料欄之間的相等比較條件 (`=`)。

ON 子句中的多個相符條件可以是：
+ 使用`AND`邏輯運算子合併
+ 使用`OR`邏輯運算子分隔

**注意**  
所有JOIN相符條件都必須符合 每一端的一列JOIN。由 `OR`或 `AND` 邏輯運算子連接的所有條件也必須遵守此要求。

以下是具有`AND`邏輯運算子的查詢範例。

```
SELECT some_col, other_col 
FROM table1 
    JOIN table2 
    ON table1.id = table2.id AND table1.name = table2.name
```

以下是具有`OR`邏輯運算子的查詢範例。

```
SELECT some_col, other_col 
FROM table1 
    JOIN table2 
    ON table1.id = table2.id OR table1.name = table2.name
```


| 控制項 | 定義 | Usage | 
| --- | --- | --- | 
| joinColumns | 您要允許可在 INNER JOIN 陳述式中查詢使用之成員的資料欄。 |  相同的資料欄無法同時歸類為 `joinColumn`和 `listColumn`（請參閱 [列出控制項](#list-controls))。 `joinColumn` 無法用於 INNER JOIN 以外的任何其他查詢部分。  | 

### 列出控制項
<a name="list-controls"></a>

*清單控制項*控制可在查詢輸出中列出的資料欄 （即 SELECT 陳述式中使用的資料欄） 或用於篩選結果 （即WHERE陳述式中使用的資料欄）。


| 控制項 | 定義 | Usage | 
| --- | --- | --- | 
| listColumns | 您允許可在 SELECT 和 中查詢使用之成員的資料欄 WHERE | listColumn 可用於 SELECT 和 WHERE。相同的資料欄無法同時做為 `listColumn`和 使用`joinColumn`。 | 

## 列出分析規則預先定義的結構
<a name="intersection-list-params-template"></a>

下列範例包含預先定義的結構，示範如何完成清單分析規則。

在下列範例中， {{`MyTable`}}是指您的資料表。您可以將每個{{使用者輸入預留位置}}取代為您自己的資訊。

```
{
  "joinColumns": [{{MyTable column name(s)}}],
  "listColumns": [{{MyTable column name(s)}}],
}
```

## 列出分析規則 - 範例
<a name="list-example"></a>

下列範例示範兩家公司如何使用 AWS Clean Rooms 清單分析協作。

A 公司有客戶關係管理 (CRM) 資料。A 公司想要取得客戶的其他客群資料，以進一步了解他們的客戶，並可能使用屬性做為其他分析的輸入。B 公司擁有區段資料，其中包含他們根據第一方資料建立的唯一區段屬性。公司 B 只希望在其資料與公司 A 資料之間重疊的客戶上，提供唯一的客群屬性給公司 A。

公司決定協同合作，讓 A 公司可以充實重疊的資料。A 公司是可以查詢的成員，而 B 公司是參與者。

若要建立協同合作並在協同合作中執行清單分析，公司會執行下列動作：

1. A 公司建立協同合作並建立成員資格。協同合作讓 B 公司成為協同合作的另一個成員。A 公司在協同合作中啟用查詢記錄，並在其帳戶中啟用查詢記錄。

1. B 公司在協同合作中建立成員資格。它在其帳戶中啟用查詢記錄。

1. 公司 A 會建立 CRM 設定的資料表

1. A 公司將分析規則新增至客戶設定的資料表，如下列範例所示。

   ```
   {
     "joinColumns": [
       "identifier1",
       "identifier2"
     ],
     "listColumns": [
       "internalid",
       "segment1",
       "segment2",
       "customercategory"
     ]
   }
   ```

   `joinColumns` – A 公司想要使用 `hashedemail` 和/或 `thirdpartyid`（從身分廠商取得），將客戶從 CRM 資料比對到客戶從客群資料。這將有助於確保 A 公司符合適當客戶的豐富資料。它們有兩個 joinColumns可能改善分析的比對率。

   `listColumns` – 公司 A 使用 在自己的系統中`internalid`使用 以外的 `listColumns`來取得富集的資料欄。它們會新增 `segment1`、 `segment2`和 `customercategory` ，以透過在篩選條件中使用特定客群來限制擴充。

1. B 公司會建立區段設定的資料表。

1. B 公司將分析規則新增至區段設定的資料表。

   ```
   {
     "joinColumns": [
       "identifier2"
     ],
     "listColumns": [
       "segment3",
       "segment4"
     ]
   }
   ```

   `joinColumns` – B 公司可讓 A 公司加入 `identifier2`，將客戶從客群資料配對至 CRM 資料。A 公司和 B 公司與身分廠商合作，以取得`identifier2`符合此協同合作的項目。他們沒有新增其他 `joinColumns`，因為他們認為 `identifier2`提供最高且最準確的配對率，而查詢不需要其他識別符。

   `listColumns` – B 公司可讓 A 公司使用 `segment3`和 `segment4` 屬性來擴充其資料，這些屬性是他們在 （與客戶 A) 上建立、收集和對齊的唯一屬性，成為資料擴充的一部分。他們希望 A 公司在資料列層級取得重疊的這些區段，因為這是資料擴充協作。

1. A 公司建立與協同合作的 CRM 資料表關聯。

1. B 公司建立與協同合作的區段資料表關聯。

1. A 公司執行查詢，例如下列查詢，以豐富重疊的客戶資料。

   ```
   SELECT companyA.internalid, companyB.segment3, companyB.segment4
   INNER JOIN returns companyB
    ON companyA.identifier2 = companyB.identifier2
   WHERE companyA.customercategory > 'xxx'
   ```

1. 公司 A 和公司 B 會檢閱查詢日誌。B 公司會驗證查詢是否符合協同合作協議中同意的內容。