

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

# AWS Clean Rooms 差异隐私的 SQL 功能
<a name="dp-sql-capabilities"></a>

AWS Clean Rooms 差异隐私使用通用查询结构来支持复杂的 SQL 查询。根据此结构对自定义分析模板进行验证，以确保它们可以在受差别隐私保护的表上运行。下表指示支持哪些函数。请参阅[查询结构和语法](analysis-rules-custom.md#dp-query-structure-syntax)了解更多信息。


| 类别 | Spark 分析引擎支持的 SQL 结构 | 常用表表达式 (CTEs) | 最终 SELECT 子句 | 
| --- |--- |--- |--- |
| 聚合函数 |    ANY\_VALUE 函数   APPROXIMATE PERCENTILE\_DISC 函数   AVG 函数   COUNT 和 COUNT DISTINCT 函数   MAX 函数   MEDIAN 函数   MIN 函数   PERCENTILE\_CONT 函数   STDDEV\_SAMP 和 STDDEV\_POP 函数   SUM 和 SUM DISTINCT 函数   VAR\_SAMP 和 VAR\_POP 函数    | 支持这样的条件： CTEs 使用受差异隐私保护的表必须生成具有用户级记录的数据。您应该 CTEs 使用`SELECT userIdentifierColumn...'格式编写 SELECT 表达式。 | 支持的聚合：AVG、COUNT、COUNT DISTINCT、STDDEV 和 SUM。 | 
| CTEs | WITH 子句、WITH 子句子查询 | 支持这样的条件： CTEs 使用受差异隐私保护的表必须生成具有用户级记录的数据。您应该 CTEs 使用`SELECT userIdentifierColumn...'格式编写 SELECT 表达式。 | 不适用 | 
| 子查询 |    SELECT   HAVING   JOIN   JOIN 条件   FROM   WHERE    | 在这些结构中，你可以有任何不引用差异隐私关系的子查询。您只能在 FROM 和 JOIN 子句中使用任何引用差异隐私关系的子查询。 | 
| 联接条款 |    INNER JOIN   LEFT JOIN   左半连接   左边反连接   RIGHT JOIN   FULL JOIN   [JOIN] OR 运算符   CROSS JOIN    | 支持的条件是，仅支持对用户标识符列进行等值联接的 JOIN 函数；在查询两个或更多开启了差别隐私的表时，必须使用这些函数。确保必需的等值联接条件是正确的。确认表所有者在所有表中配置了相同的用户标识符列，以便用户的定义在表之间保持一致。<br />在合并两个或更多开启了差别隐私的关系时，不支持 CROSS JOIN 函数。 | 
| 集合运算符 | UNION、UNION ALL、INTERSECT、除外 \| 减号（这些是同义词） | UNION、UNION ALL、INTERSECT、除外 \| 减号（这些是同义词） | 不支持 | 
| 窗口函数 | 聚合函数  AVG 窗口函数   COUNT 窗口函数   CUME\_DIST 开窗函数   DENSE\_RANK 窗口函数   FIRST\_VALUE 窗口函数   LAG 窗口函数   LAST\_VALUE 窗口函数   LEAD 窗口函数   MAX 窗口函数   MEDIAN 窗口函数   MIN 窗口函数   NTH\_VALUE 窗口函数   STDDEV\_SAMP 和 STDDEV\_POP 窗口函数（STDDEV\_SAMP 和 STDDEV 是同义词）   SUM 窗口函数   VAR\_SAMP 和 VAR\_POP 窗口函数（VAR\_SAMP 和 VARIANCE 是同义词）  <br />排名函数  DENSE\_RANK 窗口函数   NTILE 窗口函数   PERCENT\_RANK 开窗函数   RANK 窗口函数   ROW\_NUMBER 窗口函数   | 在查询开启差异隐私的关系时，窗口函数的分区子句中的用户标识符列是必填的，条件是所有这些都支持。 | 不支持 | 
| 条件表达式 |    CASE 条件表达式   COALESCE 表达式   GREATEST 和 LEAST 函数   NVL 和 COALESCE 函数   NVL2 函数   NULLIF 函数    | 全部支持 | 全部支持 | 
| Conditions |    比较条件   逻辑条件   模式匹配条件   BETWEEN 范围条件   Null 条件    | EXISTS并且IN无法使用，因为它们需要子查询。支持所有其他内容。 | 全部支持 | 
| 日期时间函数 |    事务中的日期和时间函数   串联运算符   ADD\_MONTHS 函数   CONVERT\_TIMEZONE 函数   CURRENT\_DATE 函数   DATEADD 函数   DATEDIFF 函数   DATE\_PART 函数   DATE\_TRUNC 函数   EXTRACT 函数   TO\_TIMESTAMP 函数   日期或时间戳函数的日期部分    | 全部支持 | 全部支持 | 
| 字符串函数 |    \|\|（串联）运算符   BTRIM 函数   CHAR\_LENGTH 函数   CHARACTER\_LENGTH 函数   CONCAT 函数   LEFT 和 RIGHT 函数   LEN 函数   LENGTH 函数   LOWER 函数   LPAD 和 RPAD 函数   LTRIM 函数   POSITION 函数   REGEXP\_COUNT 函数   REGEXP\_INSTR 函数   REGEXP\_REPLACE 函数   REGEXP\_SUBSTR 函数   REPEAT 函数   REPLACE 函数   REVERSE 函数   RTRIM 函数   SPLIT\_PART 函数   SUBSTRING 函数   TRANSLATE 函数   TRIM 函数   UPPER 函数    | 全部支持 | 全部支持 | 
| 数据类型格式设置函数 |    CAST 函数   TO\_CHAR   TO\_DATE 函数   TO\_NUMBER   日期时间格式字符串   数字格式字符串    | 全部支持 | 全部支持 | 
| 哈希函数 |    AES\_加密   AES\_DECRYPT   ENCODE   DECODE   MD5 函数   SHA1 函数   SHA2 函数   XX\_ HASH64    | 全部支持 | 全部支持 | 
| 数学运算符符号 | \+、-、\*、/、% 和 @ | 全部支持 | 全部支持 | 
| 数学函数 |    ABS 函数   ACOS 函数   ASIN 函数   ATAN 函数   ATAN2 函数   CBRT 函数   CEILING（或 CEIL）函数   COS 函数   COT 函数   DEGREES 函数   LTRIM 函数   EXP 函数   FLOOR 函数   LN 函数   LOG 函数   MOD 函数   PI 函数   POWER 函数   RADIANS 函数   RANDOM 函数   ROUND 函数   SIGN 函数   SIN 函数   SQRT 函数   TRUNC 函数    | 全部支持 | 全部支持 | 
| VARBYTE 函数 |    UNHEX，   UNBASE64   十六进制    HLL\_SKETCH\_AGG，    HLL\_SKETCH\_ESTIMATE   HLL\_UNION   HLL\_UNION\_AGG    | 全部支持 | 全部支持 | 
| JSON |    TO\_JSON   GET\_JSON\_OBJECT    | 全部支持 | 全部支持 | 
| 数组函数 |    数组\_包含   数组\_不同   数组\_除外   数组\_相交   ARRAY\_JOIN   数组\_删除   数组\_排序   ARRAY\_UNION    | 不支持 | 不支持 | 
| 扩展分组依据 | 分组集、汇总、立方体 | 不支持 | 不支持 | 
| 排序操作 | ORDER BY | 支持 ORDER BY 子句，条件是只有在开启差分隐私的情况下查询表时，窗口函数的分区子句才支持 ORDER BY 子句。 | 支持 | 
| 行数限制 | LIMIT、OFFSET | 不支持 CTEs 使用受差异隐私保护的表 | 全部支持 | 
| 表和列别名 |   | 支持 | 支持 | 
| 聚合函数上的数学函数 |   | 支持 | 支持 | 
| 聚合函数中的标量函数 |   | 支持 | 支持 | 

## 不支持的 SQL 构造的常见替代方案
<a name="common-alternatives"></a>


| 类别 | SQL 构造 | 或者 | 
| --- |--- |--- |
| 窗口函数 |    LISTAGG   PERCENTILE\_CONT   PERCENTILE\_DISC    | 您可以将等效的聚合函数与 GROUP BY 一起使用。 | 
| 数学运算符符号 |    $column \|\|/ 2   $column \|/ 2   $column ^ 2    |    CBRT   SQRT   POWER($column, 2)    | 
| 标量函数 |    SYSDATE   $column::integer   convert(type, $column)    |    CURRENT\_DATE   CAST $column AS integer   CAST $column AS type    | 
| 文本 | 间隔 '1 秒' | 间隔 '1' 秒 | 
| 行限制 | TOP n | 限制 n | 
| 联接 |    USING   NATURAL    | ON 子句应明确包含连接标准。 | 