

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 中的自定义分析规则 AWS Clean Rooms
<a name="analysis-rules-custom"></a>

在中 AWS Clean Rooms，*自定义分析规则*是一种新型的分析规则，它允许在配置的表上运行自定义查询。自定义 SQL 查询仍然仅限于只有SELECT命令，但与[聚合](analysis-rules-aggregation.md#agg-query-controls)和[列表](analysis-rules-list.md#list-query-controls)查询相比，可以使用更多的 SQL 结构（例如，窗口函数、OUTER JOIN 或子查询；有关完整列表 CTEs，请参阅 [AWS Clean Rooms SQL 参考](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html)）。自定义 SQL 查询不必遵循[聚合](analysis-rules-aggregation.md#agg-query-structure-syntax)和[列表](analysis-rules-list.md#list-query-controls)查询之类的查询结构。

与聚合和列表分析规则支持的使用案例相比，自定义分析规则支持更高级的使用案例，例如自定义归因分析、基准测试、增量分析和受众发现。这是对聚合和列表分析规则支持的使用案例的超集的补充。

自定义分析规则还支持差别隐私。差别隐私是一种在数学上非常严格的数据隐私保护框架。有关更多信息，请参阅 [AWS Clean Rooms 差异隐私](differential-privacy.md)。创建分析模板时， AWS Clean Rooms 差异隐私会检查该模板以确定其是否与 AWS Clean Rooms 差异隐私的通用查询结构兼容。此验证可确保您不会创建对于差别隐私保护表不允许的分析模板。

要配置自定义分析规则，数据所有者可以选择允许存储在[分析模板](create-analysis-template.md)中的特定自定义查询在其配置表上运行。数据所有者在将分析模板添加到自定义分析规则中允许的分析控制之前应先审核这些模板。分析模板仅在创建这些模板的协作中可用和可见（即使该表与其他协作关联），并且只能由可以在该协作中进行查询的成员运行。

或者，成员可以选择允许其他成员（查询提供者）无需审核即可创建查询。成员在自定义分析规则添加允许的查询提供者控制的查询提供者账户。如果查询提供者是可以查询的成员，则他们可以直接在配置表上运行任何查询。查询提供者还可以通过创建[分析模板](create-analysis-template.md)来创建查询。在存在查询提供程序和关联表的所有协作中，自动允许查询提供者创建的任何查询在表上运行。 AWS 账户 

数据所有者只能允许分析模板或账户创建查询，不能同时允许两者创建。如果数据所有者将其留空，则可以查询的成员将无法对配置表运行查询。

**不允许的输出列查询约束和 CACHE TABLE**  
自定义分析规则中[不允许的输出列约束](https://docs.aws.amazon.com/clean-rooms/latest/userguide/disallowed-columns.html)是在缓存的表上强制执行的。缓存的表不能在其 SELECT 子句中引用不允许的输出列。要在查询的后续部分中使用带有不允许的输出列约束的列，请将缓存的表转换为公用表表达式 (CTE)。

**Topics**
+ [自定义分析规则预定义结构](#custom-predefined-structure)
+ [自定义分析规则示例](#custom-example)
+ [具有差别隐私的自定义分析规则](#custom-diff-privacy)

## 自定义分析规则预定义结构
<a name="custom-predefined-structure"></a>

以下示例包含一个预定义的结构，说明了如何完成开启差别隐私的自定义分析规则。`userIdentifier` 值是唯一地标识您的用户的列，例如 *user\_id*。如果在协作中具有两个或更多开启了差别隐私的表， AWS Clean Rooms 要求您在两个分析规则中配置与用户标识符列相同的列，以在表之间保持一致的用户定义。

```
{
  "allowedAnalyses": ["ANY_QUERY"] | string[],
  "allowedAnalysisProviders": [],
  "differentialPrivacy": {
    "columns": [
      {
        "name": "{{userIdentifier}}"
      }
    ]
  }
}
```

您可以：
+ 将分析模板 ARNs 添加到允许的分析控件。在这种情况下，不包括 `allowedAnalysisProviders` 控制。

  ```
  {
    allowedAnalyses: string[]
  }
  ```
+  AWS 账户 IDs 向`allowedAnalysisProviders`控件添加成员。在这种情况下，您可以将 `ANY_QUERY` 添加到 `allowedAnalyses` 控制。

  ```
  {
    allowedAnalyses: ["ANY_QUERY"],
    allowedAnalysisProviders: string[]
  }
  ```

## 自定义分析规则示例
<a name="custom-example"></a>

以下示例演示了两家公司如何合作 AWS Clean Rooms 使用自定义分析规则。

A 公司有客户和销售数据。A 公司有兴趣了解 B 公司网站上广告活动的销售增量。B 公司拥有对 A 公司有用的观众数据和细分属性（例如，他们观看广告时使用的设备）。

A 公司想在协作中运行一个特定的增量查询。

为创建协作并在协作中运行自定义分析，两家公司执行以下操作：

1. A 公司创建协作并创建成员身份。协作中的另一个成员是 B 公司。A 公司在协作中启用查询日志记录，并在其账户中启用查询日志记录。

1. B 公司在协作中创建成员身份。它在其账户中启用查询日志记录。

1. A 公司创建 CRM 配置表。

1. A 公司向销售配置表添加空的自定义分析规则。

1. A 公司将销售配置表与协作关联起来。

1. B 公司创建观众配置表。

1. B 公司在观众配置表中添加一个空的自定义分析规则。

1. B 公司将观众配置表与协作关联起来。

1. A 公司查看与协作关联的销售表和观众表，并创建分析模板，为活动月份添加增量查询和参数。

   ```
   {
       "analysisParameters": [
       {
           "defaultValue": ""
           "type": "DATE"
           "name": "campaign_month"
       }
       ],
       "description": "Monthly incrementality query using sales and viewership data"
       "format": "SQL"
       "name": "Incrementality analysis"
       "source": 
           "WITH labeleddata AS
           (
           SELECT hashedemail, deviceid, purchases, unitprice, purchasedate,
           CASE
               WHEN testvalue IN ('value1', 'value2', 'value3') THEN 0
               ELSE 1
           END AS testgroup
           FROM viewershipdata
           )
           SELECT labeleddata.purchases, provider.impressions
           FROM labeleddata 
           INNER JOIN salesdata
             ON labeleddata.hashedemail = provider.hashedemail
           WHERE MONTH(labeleddata.purchasedate) > :campaignmonth
           AND testgroup = :group
          "
   }
   ```

1. A 公司将其账户（例如 444455556666）添加到自定义分析规则允许的分析提供者控制中。他们之所以使用允许的分析提供者控制，是因为他们希望允许在销售配置表上运行他们创建的任何查询。

   ```
   {
     "allowedAnalyses": [
       "ANY_QUERY"
     ],
     "allowedAnalysisProviders": [
       "444455556666"
     ]
   }
   ```

1. B 公司在协作中看到创建的分析模板并查看其内容，包括查询字符串和参数。

1. B 公司确定分析模板实现了增量使用案例，并满足如何查询其观众配置表的隐私要求。

1. B 公司将分析模板 ARN 添加到观众表的自定义分析规则允许的分析控制中。他们之所以使用允许的分析控制，是因为他们只想允许在观众配置表上运行增量查询。

   ```
   {
     "allowedAnalyses": [
       "arn:aws:cleanrooms:us-east-1:111122223333:membership/41327cc4-bbf0-43f1-b70c-a160dddceb08/analysistemplate/1ff1bf9d-781c-418d-a6ac-2b80c09d6292"
     ]
   }
   ```

1. A 公司运行分析模板并使用参数值 `05-01-2023`。

## 具有差别隐私的自定义分析规则
<a name="custom-diff-privacy"></a>

在中 AWS Clean Rooms，自定义分析规则支持差异隐私。差别隐私是一种在数学上非常严格的数据隐私保护框架，可以帮助保护您的数据以防范重新识别尝试。

差异隐私支持综合分析，例如广告活动规划、 post-ad-campaign衡量、金融机构联盟中的基准测试以及医疗保健研究的 A/B 测试。

支持的查询结构和语法在 [查询结构和语法](#dp-query-structure-syntax) 中定义。

### 具有差别隐私的自定义分析规则示例
<a name="custom-diff-privacy-example"></a>

**注意**  
AWS Clean Rooms 差异隐私仅适用于数据存储在 Amazon S3 中的协作。

考虑上一节中介绍的[自定义分析规则示例](#custom-example)。该示例说明了如何使用差别隐私保护您的数据以防范重新识别尝试，同时允许您的合作伙伴从您的数据中了解业务关键型见解。假设 B 公司具有观众数据，并希望使用差别隐私保护其数据。为了完成差别隐私设置，B 公司完成以下步骤：

1. B 公司开启差别隐私，同时在观众配置表中添加自定义分析规则。B 公司选择 `viewershipdata.hashedemail` 以作为用户标识符列。

1. B 公司在协作中[添加差别隐私策略](configure-differential-privacy.md)，以使其观众数据表可供查询。B 公司选择默认策略以快速完成设置。

A 公司希望了解 B 公司网站上的广告活动的销售增量，并运行分析模板。由于该查询与 Diferation Privacy 的 AWS Clean Rooms 通用[查询结构](#dp-query-structure-syntax)兼容，因此查询可以成功运行。

### 查询结构和语法
<a name="dp-query-structure-syntax"></a>

包含至少一个开启了差别隐私的表的查询必须遵循以下语法。

```
query_statement:
    [cte, ...] final_select

 cte:
    WITH sub_query AS (
       inner_select
       [ UNION | INTERSECT | UNION_ALL | EXCEPT/MINUS ]
       [ inner_select ]
    )
   
 inner_select:
     SELECT [user_id_column, ] expression [, ...] 
     FROM table_reference [, ...] 
     [ WHERE condition ]
     [ GROUP BY user_id_column[, expression] [, ...] ] 
     [ HAVING condition ] 

 final_select:
     SELECT [expression, ...] | COUNT | COUNT_DISTINCT | SUM | AVG | STDDEV
     FROM table_reference [, ...]
     [ WHERE condition ]
     [ GROUP BY expression [, ...] ] 
     [ HAVING COUNT | COUNT_DISTINCT | SUM | AVG | STDDEV | condition ]
     [ ORDER BY column_list ASC | DESC ] 
     [ OFFSET literal ]
     [ LIMIT literal ]

 expression:
    column_name [, ...] | expression AS alias | aggregation_functions | window_functions_on_user_id | scalar_function | CASE | column_name math_expression [, expression]  
    
 window_functions_on_user_id:
    function () OVER (PARTITION BY user_id_column, [column_name] [ORDER BY column_list ASC|DESC])
```

**注意**  
对于差别隐私查询结构和语法，请注意以下事项：  
不支持子查询。
如果表或 CTE 涉及受差异隐私保护的数据，则公用表表达式 (CTEs) 应发出用户标识符列。应在用户级别完成筛选、分组和聚合。
final\_select 允许使用 COUNT DISTINCT、COUNT、SUM、AVG 和 STDDEV 聚合函数。

有关差别隐私支持哪些 SQL 关键字的更多详细信息，请参阅 [AWS Clean Rooms 差异隐私的 SQL 功能](dp-sql-capabilities.md)。