列表分析规则 - AWS Clean Rooms

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

列表分析规则

在 AWS Clean Rooms 中,列表分析规则 输出行级列表,显示添加到的配置表与可以查询成员的配置表之间的重叠。可以查询的成员运行包含列表分析规则的查询。

列表分析规则类型支持扩充和受众构建等使用案例。

有关此分析规则的预定义查询结构和语法的更多信息,请参阅列表分析规则预定义结构

列表分析规则的参数(在列表分析规则 — 查询控制中定义)具有查询控制。它的查询控制包括选择可以在输出中列出的列的功能。查询要求至少有一次与可以查询成员的配置表联接,可以是直接联接,也可以是传递联接。

不存在像聚合分析规则那样的查询结果控制。

列表查询只能使用数学运算符。它们不能使用其他函数(例如聚合或标量)。

列表查询结构和语法

对具有列表分析规则的表的查询必须遵循以下语法。

--select_list_expression SELECT [TOP number ] 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]

下表解释前面语法中列出的每个表达式。

Expression 定义 示例
select_list_expression

包含至少一个表列名的逗号分隔列表。

DISTINCT 参数是必需的。

注意

select_list_expression 可以带或不带 AS 参数对列设置别名。

它还支持 TOP 参数。有关更多信息,请参阅 AWS Clean Rooms SQL 参考

SELECT DISTINCT segment

table_expression

使用 join_condition 连接到 join_condition 的表或表的联接。

join_condition 返回布尔值。

table_expression 支持:

  • 特定的 JOIN 类型 (INNER JOIN)

  • join_condition 中的相等比较条件 (=)

  • 逻辑运算符(ANDOR)。

FROM consumer_table INNER JOIN provider_table ON consumer_table.identifier1 = provider_table.identifier1 AND consumer_table.identifier2 = provider_table.identifier2
where_expression 返回布尔值的条件表达式。它可能包括以下内容:
  • 表列名称

  • 数学运算符

  • 字符串文本

  • 数值文本

支持的比较条件是 (=, >, <, <=, >=, <>, !=, 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

此表达式必须采用正整数。它也可以与 TOP 参数互换。

limit_expression 是可选项。

LIMIT 100

关于列表查询的结构和语法,请注意以下几点:

  • 不支持除 SELECT 之外的 SQL 命令。

  • 不支持子查询和通用表格表达式(例如 WITH)。

  • 不支持 HAVING、GROUP BY 和 ORDER BY 子句

  • 不支持 OFFSET 参数

列表分析规则 — 查询控制

使用列表查询控制,您可以控制如何使用表中的列来查询表。例如,您可以控制哪一列用于联接,或者 SELECT 语句和 WHERE 子句中可以使用哪一列。

下面几节解释每种控制。

联接控制

使用联接控制,您可以控制如何将您的表连接到 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 两侧各一条记录匹配。所有由 ORAND 逻辑运算符连接的条件也必须遵守此要求。

以下是使用 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 语句中使用的列。

同一列不能同时归类为 joinColumnlistColumn(参阅列表控制)。

除了 INNER JOIN 之外,不能在查询的任何其他部分中使用 joinColumn

列表控制

列表控件控制可在查询输出中列出(即在 SELECT 语句中使用)或用于筛选结果(即在WHERE语句中使用)的列。

控件 定义 使用量
listColumns 您允许可以查询的成员在 SELECT 和 WHERE 中使用的列。 listColumn 可以在 SELECT 和 WHERE 中使用。

同一列不能同时用作 listColumnjoinColumn

列表分析规则预定义结构

以下示例包括一个预定义的结构,该结构向您展示了如何完成列表分析规则。

在以下示例中,MyTable 指您的数据表。您可以将每个用户输入占位符替换为自己的信息。

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

列表分析规则 — 示例

以下示例演示了两家公司如何使用列表分析在 AWS Clean Rooms 中进行协作。

A 公司有客户关系管理 (CRM) 数据。A 公司希望获得有关其客户的更多细分数据,以进一步了解他们的客户,并有可能使用属性作为其他分析的输入。B 公司的细分数据由他们根据第一方数据创建的独特细分属性组成。B 公司只想向 A 公司提供其数据与 A 公司数据重叠的客户的唯一细分属性。

两家公司决定进行协作,以便 A 公司能够扩充重叠的数据。A 公司是可以查询的成员,B 公司是贡献者。

为创建协作并在协作中运行列表分析,两家公司执行以下操作:

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

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

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

  4. A 公司将分析规则添加到客户配置表中,如以下示例所示。

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

    joinColumns — A 公司希望使用 hashedemail 和/或 thirdpartyid(从身份供应商处获得)将 CRM 数据中的客户与细分数据中的客户进行匹配。这将有助于确保 A 公司为合适的客户匹配扩充的数据。他们有两个 JoinColumns,可以提高分析的匹配率。

    listColumns — A 公司使用 listColumns 来获取他们在自己系统中使用的 internalid 旁边的扩充列。他们添加了 segment1segment2customercategory,以便通过在筛选器中使用它们,将扩充限制到特定的细分。

  5. B 公司创建细分配置表。

  6. B 公司将分析规则添加到细分配置表中。

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

    joinColumns— B 公司让 A 公司在 identifier2 上进行联接,以便将细分数据中的客户与 CRM 数据相匹配。A 公司和 B 公司与身份供应商合作,以获得与此协作相匹配的 identifier2。他们之所以没有添加其他 joinColumns,是因为他们认为 identifier2 可以提供最高和最准确的匹配率,而且查询不需要其他标识符。

    listColumns — B 公司让 A 公司使用 segment3segment4 属性来扩充其数据,这些属性是他们(与客户 A)一起创建、收集和调整的独特属性,是数据扩充的一部分。他们希望 A 公司在行级获取这些重叠的细分,因为这是一项数据扩充协作。

  7. A 公司创建了与协作的 CRM 表关联。

  8. B 公司创建了与协作的细分表关联。

  9. A 公司运行查询(例如以下查询)以扩充重叠的客户数据。

    SELECT companyA.internalid, companyB.segment3, companyB.segment4 INNER JOIN returns companyB ON companyA.identifier2 = companyB.identifier2 WHERE companyA.customercategory > 'xxx'
  10. A 公司和 B 公司查看查询日志。B 公司验证查询是否符合协作协议中上商定的内容。