加密计算中支持的文件和数据类型 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 条目中的前导和尾部空格都会被修剪。

自定义 NULL 对.csv 文件进行编码

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

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

注意

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

C3R 如何解释 .csv 条目

下表提供了如何编组.csv 条目的示例 (cleartext 到 cleartext 为了清楚起见)基于为--csvInputNULLValue=<csv-input-null>--csvOutputNULLValue=<csv-output-null>标志提供的值(如果有)。在 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 加密客户端可以处理任何非复杂(即原始类型)数据 Parquet 表示支持的数据类型的文件 AWS Clean Rooms。

但是,只能将字符串列用于 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