

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# リスト分析ルール
<a name="analysis-rules-list"></a>

では AWS Clean Rooms、*リスト分析ルール*は、追加された設定済みテーブルとクエリ可能なメンバーの設定済みテーブルとの重複の行レベルのリストを出力します。クエリを行えるメンバーが、リスト分析ルールを含むクエリを実行します。

リスト分析ルールは、エンリッチメントやオーディエンス構築などのユースケースに対応します。

この分析ルールの事前定義されたクエリ構造と構文の詳細については、「[リスト分析ルールの事前定義された構造](#intersection-list-params-template)」を参照してください。

[リスト分析ルール - クエリコントロール](#parameters-list-query-controls) で定義されているリスト分析ルールのパラメータにはクエリコントロールがあります。クエリコントロールには、出力に表示できる列を選択する機能が含まれています。クエリには、直接または間接的にクエリを実行できるメンバーの設定済みテーブルとの結合が少なくとも 1 つ必要です。

[集計分析ルール](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}} | テーブル列名を 1 つ以上含むカンマ区切りリストです。<br />`DISTINCT` パラメータが必須です。 `select_list_expression` では `AS` パラメータの有無にかかわらず、列にエイリアスを指定できます。 <br />詳細については、「[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`。<br />`join_condition` はブール値を返します。<br />`table_expression` では、以下がサポートされています。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/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/ja_jp/clean-rooms/latest/userguide/analysis-rules-list.html)サポートされている比較条件は (`=, >, <, <=, >=, <>, !=, NOT, IN, NOT IN, LIKE, IS NULL, IS NOT NULL`) です。<br />サポートされている論理演算子は (`AND, OR`) です。<br />`where_expression` はオプションです。 | `WHERE state + '_' + city = 'NY_NYC'`<br />`WHERE timestampColumn = timestampColumn2 - 14`  | 
| {{limit\_expression}} | この式は正の整数にする必要があります。<br />`limit_expression` はオプションです。 | `LIMIT 100` | 

リストクエリの構造と構文については、次の点に注意してください。
+ SELECT 以外の SQL コマンドはサポートされていません。
+ サブクエリと共通テーブル式 (WITH など) はサポートされていません。
+ HAVING、GROUP BY、および 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 のみをサポートしています。リスト分析ルールでは、少なくとも 1 つの 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` と、コラボレーション内のもう 1 つの設定済みテーブルの `joinColumn` で動作する必要があります。テーブルのどの列を `joinColumn` として使用できるようにするかはテーブルの所有者が決定します。

ON 句内の一致条件ごとに、2 つの列間の等価比較条件 (`=`) を使用する必要があります。

ON 句では次のようにして複数の一致条件を使用できます。
+ `AND` 論理演算子を使用して組み合わせる
+ `OR` 論理演算子を使用して区切る

**注記**  
JOIN の一致条件では、必ず JOIN の各側の 1 つの行が一致しなければなりません。`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
```


| コントロール | 定義 | 使用方法 | 
| --- | --- | --- | 
| joinColumns | クエリを行えるメンバーに INNER JOIN ステートメントでの使用を許可する列。 | 同じ列を `joinColumn` と `listColumn` の両方に分類することはできません (「[リストコントロール](#list-controls)」を参照)。<br />`joinColumn` は INNER JOIN 以外のクエリのどの部分でも使用できません。 | 

### リストコントロール
<a name="list-controls"></a>

*リストコントロール*は、クエリ出力に一覧表示できる (SELECT ステートメントで使用される) 列や、結果のフィルタリングに使用できる (WHERE ステートメントで使用される) 列を制御します。


| コントロール | 定義 | 使用方法 | 
| --- | --- | --- | 
| 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>

次の例は、2 つの企業がリスト分析 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` (ID ベンダーから取得) を使用して CRM データの顧客とセグメントデータの顧客を照合したいと考えています。これにより、A 社は適切な顧客のエンリッチメントデータと照合できるようになります。JoinColumns が 2 つあることで、分析の一致率が向上する可能性があります。

   `listColumns` – A 社は、`listColumns` を使用して、自社のシステム内で使用している `internalid` に加えてエンリッチメントのための列を取得します。`segment1`、`segment2`、`customercategory` を追加し、フィルタで使用することでエンリッチメントを特定のセグメントに限定できるようにします。

1. B 社が、設定済みセグメントテーブルを作成します。

1. B 社が、分析ルールを設定済みセグメントテーブルに追加します。

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

   `joinColumns` – B 社は、A 社が `identifier2` で結合を実行して、セグメントデータの顧客を CRM データの顧客と照合できるようにします。A 社と B 社は ID ベンダーと協力して、今回のコラボレーションに適していそうな `identifier2` を取得しています。`identifier2` は最も一致率が高く、最も正確で、これ以外の ID はクエリに必要ないと考えられたため、他の `joinColumns` は追加しませんでした。

   `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 社は、クエリがコラボレーション契約で合意された内容と一致していることを確認します。