在 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 查询模板执行分析的一般流程包括以下操作:

  1. 启动 Clean Room 创建过程

  2. 当系统提示您选择模板时,选择 Horizontal » SQL Query,然后 配置 SQL 查询模板

  3. 与协作者共享 Clean Room。

配置 SQL 查询模板

除非为列指定策略或完全允许列,否则使用者查询无法对 SQL 查询模板中的列进行选择、筛选或联接。

将 SQL 查询模板添加到 Clean Room 后,可以通过执行以下操作对其进行配置:

允许使用者不受限制地对列进行 SELECT、筛选或联接

使用 Fully Permitted Columns 下拉列表选择列的名称。

为一个或多个列指定聚合策略

要为列指定 聚合策略,请使用 Aggregation Policy Columns 下拉列表选择列的名称。指定聚合策略后,使用者的查询必须将数据聚合到包含列中最小数量非重复值的组中。

为列指定聚合策略后,可以调整使用者查询返回的聚合组中必须包含列中非重复值(即实体)的数量。要调整每个组所需的实体数量,请执行以下操作:

  1. 查找 Privacy Settings » Aggregation Policies 部分。

  2. 找到该列,然后增加或减少其 Threshold。阈值越高,每个聚合组必须返回的非重复值就越多,这就为实体提供了更强的隐私保护。

您可以为其他列指定聚合策略,以定义其他实体,然后调整每个组中必须包含的这些实体的数量。

为一个或多个列指定投影策略

要为列指定 投影策略,请使用 Projection Policy Columns 下拉列表选择列的名称。用户无法在 SELECT 语句中使用具有投影策略的列。

使用 SQL 查询模板运行分析

使用本节中的信息在 SQL 查询模板中编写成功的查询。

我可以对哪些列进行联接和筛选?

您可以对任何具有策略或获得完全允许的列进行联接和筛选。要确定列是否可以进行联接或用于筛选器中,请执行以下操作:

  1. Query Configurations 部分,找到 Tables 磁贴。

  2. 使用下拉列表选择表。您可以对列出的所有列进行联接和筛选。

聚合要求

如果提供商为列指定了聚合策略,则使用 SQL 查询模板执行的所有查询都必须返回聚合结果。

要确定查询是否必须聚合结果,请执行以下操作:

  1. Query Configurations 部分,找到 Tables 磁贴。

  2. 使用下拉列表选择表。

  3. 查找有聚合策略标签的列。如果至少有一个聚合策略标签,则必须在查询中使用聚合。

有关如何对受聚合策略保护的数据编写成功查询的指南,请参阅:

我可以对哪些列进行投影?

使用 SQL 查询模板执行的查询可以对哪些列进行投影(在 SELECT 语句中使用)存在限制。

要确定查询是否可以对列进行投影,请执行以下操作:

  1. Query Configurations 部分,找到 Tables 磁贴。

  2. 使用下拉列表选择表。

  3. 查找有投影策略标签的列,这意味着您不能对其进行投影。除了带有投影策略标签的列,您可以对所有列进行投影。

显示结果

要在 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;
Copy
SELECT gender, regions
  FROM TABLE sample_db.demo.customer;
Copy
公用表表达式 (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;
Copy
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
Copy
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;
Copy
DATE_TRUNC

已获准

SELECT COUNT(*),
  DATE_TRUNC('week', date_joined) AS week
  FROM consumer_sample_database.audience_overlap.customers
  GROUP BY week;
Copy
加引号的标识符

已获准

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;
Copy
语言: 中文