在 Web 应用程序中使用 SQL 查询模板¶
通过在 Clean Room 中加入 SQL 查询模板,使用者可以编写自由格式的 SQL,以查询 Clean Room 中的数据。使用 SQL 查询模板时,使用者查询必须满足某些要求才能成功返回结果。这些要求取决于数据提供商如何通过数据隐私策略保护其表格。
模板策略¶
SQL 查询模板采用以下策略来控制使用者查询数据的方式:
- 投影策略
具有投影策略的列不能进行投影(即包含在 SELECT 语句中)。不过,使用者可以使用投影策略对列进行筛选或联接。
- 聚合策略
要求查询必须聚合数据才能返回结果。
聚合策略要求每个聚合组包含最少数量的实体,从而保护实体的隐私。实体由列中的非重复值标识。例如,
email
列中值为joe@company.com
的所有行可能属于同一个实体。在 Clean Room 中,聚合策略可以保护表中的多个实体。例如,该策略可能要求聚合组至少包含 5 个家庭和 10 个用户,其中家庭和用户都是实体。
请注意,为列指定聚合策略后,用户就可以对该列进行筛选、投影和联接。
重要
使用 SQL 查询模板时,会忽略在 Clean Room 创建过程中指定的联接策略。
为 Clean Room 添加 SQL 查询模板¶
配置 Clean Room 以便用户使用 SQL 查询模板执行分析的一般流程包括以下操作:
启动 Clean Room 创建过程。
当系统提示您选择模板时,选择 Horizontal » SQL Query,然后 配置 SQL 查询模板。
与协作者共享 Clean Room。
配置 SQL 查询模板¶
除非为列指定策略或完全允许列,否则使用者查询无法对 SQL 查询模板中的列进行选择、筛选或联接。
将 SQL 查询模板添加到 Clean Room 后,可以通过执行以下操作对其进行配置:
- 允许使用者不受限制地对列进行 SELECT、筛选或联接
使用 Fully Permitted Columns 下拉列表选择列的名称。
- 为一个或多个列指定聚合策略
要为列指定 聚合策略,请使用 Aggregation Policy Columns 下拉列表选择列的名称。指定聚合策略后,使用者的查询必须将数据聚合到包含列中最小数量非重复值的组中。
为列指定聚合策略后,可以调整使用者查询返回的聚合组中必须包含列中非重复值(即实体)的数量。要调整每个组所需的实体数量,请执行以下操作:
查找 Privacy Settings » Aggregation Policies 部分。
找到该列,然后增加或减少其 Threshold。阈值越高,每个聚合组必须返回的非重复值就越多,这就为实体提供了更强的隐私保护。
您可以为其他列指定聚合策略,以定义其他实体,然后调整每个组中必须包含的这些实体的数量。
- 为一个或多个列指定投影策略
要为列指定 投影策略,请使用 Projection Policy Columns 下拉列表选择列的名称。用户无法在 SELECT 语句中使用具有投影策略的列。
使用 SQL 查询模板运行分析¶
使用本节中的信息在 SQL 查询模板中编写成功的查询。
我可以对哪些列进行联接和筛选?¶
您可以对任何具有策略或获得完全允许的列进行联接和筛选。要确定列是否可以进行联接或用于筛选器中,请执行以下操作:
在 Query Configurations 部分,找到 Tables 磁贴。
使用下拉列表选择表。您可以对列出的所有列进行联接和筛选。
聚合要求¶
如果提供商为列指定了聚合策略,则使用 SQL 查询模板执行的所有查询都必须返回聚合结果。
要确定查询是否必须聚合结果,请执行以下操作:
在 Query Configurations 部分,找到 Tables 磁贴。
使用下拉列表选择表。
查找有聚合策略标签的列。如果至少有一个聚合策略标签,则必须在查询中使用聚合。
有关如何对受聚合策略保护的数据编写成功查询的指南,请参阅:
我可以对哪些列进行投影?¶
使用 SQL 查询模板执行的查询可以对哪些列进行投影(在 SELECT 语句中使用)存在限制。
要确定查询是否可以对列进行投影,请执行以下操作:
在 Query Configurations 部分,找到 Tables 磁贴。
使用下拉列表选择表。
查找有投影策略标签的列,这意味着您不能对其进行投影。除了带有投影策略标签的列,您可以对所有列进行投影。
显示结果¶
要在 Web 应用程序中运行查询,请选择 Run,然后选择名称并安排查询运行。查看 Analyses and Queries 列表中的查询状态,了解查询何时完成。选择已完成的查询来查看结果。成功的查询会显示结果表。如果结果表满足接下来详述的特定要求,还可以用图表显示结果。Snowflake 提供多种图表类型,包括条形图、折线图和饼图;在结果部分选择相应按钮即可选择输出格式。
制图要求¶
为了让 Snowflake 能够生成图表:
**结果表必须至少包括一个度量(数字)列和一个维度(类别)列。
度量列名称必须包含以下前缀或后缀(不区分大小写):
列名前缀:
COUNT
SUM
AVG
MIN
MAX
OUTPUT
OVERLAP
列名后缀:
_OVERLAP
Snowflake 使用结果表中第一个符合条件的度量列和第一个维度列生成图表。
限制¶
ORDER BY 子句对分析结果的显示方式没有影响。
查询示例¶
使用本节可以更好地了解在使用 SQL 查询模板运行分析时,查询可以包括哪些内容,不可以包括哪些内容。
- 不使用聚合函数的查询
在某些情况下,不使用聚合函数也可以返回值。
已获准
未获准
SELECT gender, regions FROM TABLE sample_db.demo.customer GROUP BY gender, region;
SELECT gender, regions FROM TABLE sample_db.demo.customer;
- 公用表表达式 (CTEs)
已获准
未获准
WITH audience AS (SELECT COUNT(DISTINCT t1.hashed_email), t1.status FROM provider_db.overlap.customers t1 JOIN consumer_db.overlap.customers t2 ON t1.hashed_email = t2.hashed_email GROUP BY t1.status); SELECT * FROM audience;
WITH audience AS (SELECT t1.hashed_email, t1.status FROM provider_db.overlap.customers quoted t1 JOIN consumer_db.overlap.customers t2 ON t1.hashed_email = t2.hashed_email GROUP BY t1.status) SELECT * FROM audience
- CREATE、 ALTER、 TRUNCATE
查询无法使用 CREATE、ALTER 或 TRUNCATE。
- 使用联接执行查询
已获准
SELECT p.education_level, c.status, AVG(p.days_active), COUNT(DISTINCT p.age_band) FROM sample_database_preprod.demo.customers c INNER JOIN sample_database_preprod.demo.customers p ON c.hashed_email = p.hashed_email GROUP BY ALL;
- DATE_TRUNC
已获准
SELECT COUNT(*), DATE_TRUNC('week', date_joined) AS week FROM consumer_sample_database.audience_overlap.customers GROUP BY week;
- 加引号的标识符
已获准
SELECT COUNT(DISTINCT t1.”hashed_email”) FROM provider_sample_database.audience_overlap."customers quoted" t1 INNER JOIN consumer_sample_database.audience_overlap.customers t2 ON t1."hashed_email" = t2.hashed_email;