Clean Rooms 加密计算中支持的文件和数据类型 - AWS Clean Rooms

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

Clean Rooms 加密计算中支持的文件和数据类型

C3R 加密客户端可识别以下文件类型:

  • CSV 文件

  • Parquet 文件

您可以在 C3R 加密客户端中使用 --fileFormat 标志来明确指定文件格式。如果明确指定,则文件格式不取决于文件扩展名。

CSV 文件

假定扩展名为 .csv 的文件采用 CSV 格式并包含 UTF-8 编码的文本。C3R 加密客户端将所有值视为字符串。

.csv 文件中支持的属性

C3R 加密客户端要求 .csv 文件具有以下属性:

  • 可能包含也可能不包含唯一命名每列的初始标题行。

  • 逗号分隔。(目前,不支持自定义分隔符。)

  • UTF-8 编码的文本。

从 .csv 条目中修剪空格

.csv 条目中的前导和尾部空格都会被修剪。

.csv 文件的自定义 NULL 编码

.csv 文件可以使用自定义 NULL 编码。

使用 C3R 加密客户端,您可以使用 --csvInputNULLValue=<csv-input-null> 标志为输入数据中的 NULL 条目指定自定义编码。通过使用 --csvOutputNULLValue=<csv-output-null> 标志,C3R 加密客户端可以在生成的输出文件中为 NULL 条目使用自定义编码。

注意

NULL 条目被认为缺少 内容,特别是在 SQL 表等更丰富的表格格式的上下文中。尽管由于历史原因 .csv 并不明确支持这种描述,但通常的惯例是将仅包含空格的空条目视为 NULL。因此,这是 C3R 加密客户端的默认行为,可以根据需要对其进行自定义。

C3R 如何解释 .csv 条目

下表举例说明了如何根据为 --csvInputNULLValue=<csv-input-null>--csvOutputNULLValue=<csv-output-null> 标志提供的值(如果有)编组 .csv 条目(为清楚起见,cleartext 至 cleartext)。在 C3R 解释任何值的含义之前,将修剪引号之外的前导和尾部空格。

<csv-input-null> <csv-output-null> 输入条目 输出条目
,AnyProduct, ,AnyProduct,
, AnyProduct , ,AnyProduct,
,"AnyProduct", ,AnyProduct,
, "AnyProduct" , ,AnyProduct,
,, ,,
, , ,,
,"", ,,
," ", ," ",
, " " , ," ",
"AnyProduct" "NULL" ,AnyProduct, ,NULL,
"AnyProduct" "NULL" , AnyProduct , ,NULL,
"AnyProduct" "NULL" ,"AnyProduct", ,NULL,
"AnyProduct" "NULL" , "AnyProduct" , ,NULL,
"NULL" ,, ,NULL,
"NULL" , , ,NULL,
"NULL" ,"", ,NULL,
"NULL" ," ", ," ",
"NULL" , " " , ," ",
"" "NULL" ,, ,NULL,
"" "NULL" , , ,NULL,
"" "NULL" ,"", ,"",
"" "NULL" ," ", ," ",
"" "NULL" , " " , ," ",
"\"\"" "NULL" ,, ,,
"\"\"" "NULL" , , ,,
"\"\"" "NULL" ,"", ,NULL,
"\"\"" "NULL" ," ", ," ",
"\"\"" "NULL" , " " , ," ",

不带标题的 CSV 文件

源 .csv 文件不必在第一行中包含标题来唯一命名每列。但是,没有标题行的 .csv 文件需要位置加密架构。需要的是位置加密架构,而不是带标题行的 .csv 文件和 Parquet 文件使用的典型映射架构。

位置加密架构按位置而不是按名称指定输出列。映射加密架构将源列名映射到目标列名。有关更多信息,包括两种架构格式的详细讨论和示例,请参阅映射和定位表架构

Parquet 文件

假定扩展名为 .parquet 的文件采用 Apache Parquet 格式。

支持的 Parquet 数据类型

C3R 加密客户端可以在表示 AWS Clean Rooms支持的数据类型的 Parquet 文件中处理任何非复杂(即基本类型)数据。

但是,只能将字符串列用于 sealed 列。

支持以下 Parquet 数据类型:

  • 带以下逻辑注释的 Binary 基本类型:

    • 如果已设置 --parquetBinaryAsStringSTRING 数据类型),则为 None

    • Decimal(scale, precision)DECIMAL 数据类型)

    • StringSTRING 数据类型)

  • 不带逻辑注释的 Boolean 基本数据类型(BOOLEAN 数据类型)

  • 不带逻辑注释的 Double 基本数据类型(DOUBLE 数据类型)

  • Decimal(scale, precision) 逻辑注释的 Fixed_Len_Binary_Array 基本类型(DECIMAL 数据类型)

  • 不带逻辑注释的 Float 基本数据类型(FLOAT 数据类型)

  • 带以下逻辑注释的 Int32 基本类型:

    • 无(INT 数据类型)

    • DateDATE 数据类型)

    • Decimal(scale, precision)DECIMAL 数据类型)

    • Int(16, true)SMALLINT 数据类型)

    • Int(32, true)INT 数据类型)

  • 带以下逻辑注释的 Int64 基本数据类型:

    • 无(BIGINT 数据类型)

    • Decimal(scale, precision)DECIMAL 数据类型)

    • Int(64, true)BIGINT 数据类型)

    • Timestamp(isUTCAdjusted, TimeUnit.MILLIS)TIMESTAMP 数据类型)

    • Timestamp(isUTCAdjusted, TimeUnit.MICROS)TIMESTAMP 数据类型)

    • Timestamp(isUTCAdjusted, TimeUnit.NANOS)TIMESTAMP 数据类型)

加密非字符串值

当前,sealed 列仅支持字符串值。

对于 .csv 文件,C3R 加密客户端会将所有值视为 UTF-8 编码的文本,并且在加密之前不会尝试对其进行不同的解释。

对于指纹列,类型被分为等价类。等价类是一组数据类型,可以通过代表性数据类型明确比较其是否相等。

等价类允许将相同的指纹分配给相同的语义值,而不管原始表示形式如何。但是,两个等价类中的相同值不会生成相同的指纹列。

例如,无论 INTEGRAL42 最初是 SMALLINTINT 还是 BIGINT,都将为其分配相同的指纹。此外,INTEGRAL0 永远不会与 BOOLEANFALSE 匹配(由值 0 表示)。

指纹列支持以下等价类和相应 AWS Clean Rooms 的数据类型:

等价类 支持的 AWS Clean Rooms 数据类型
BOOLEAN BOOLEAN
DATE DATE
INTEGRAL BIGINT, INT, SMALLINT
STRING CHAR, STRING, VARCHAR