

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

# Clean Rooms 加密计算中支持的文件和数据类型
<a name="crypto-computing-file-types"></a>

C3R 加密客户端可识别以下文件类型：
+ CSV 文件
+ Parquet 文件

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

**Topics**
+ [CSV 文件](#csv-file-type)
+ [Parquet 文件](#parquet-file-type)
+ [加密非字符串值](#encrypt-non-string-values)

## CSV 文件
<a name="csv-file-type"></a>

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

### .csv 文件中支持的属性
<a name="csv-properties"></a>

C3R 加密客户端要求 .csv 文件具有以下属性：
+ 可能包含也可能不包含唯一命名每列的初始标题行。
+ 逗号分隔。（目前，不支持自定义分隔符。）
+ UTF-8 编码的文本。

#### 从 .csv 条目中修剪空格
<a name="whitespace-trimming"></a>

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

#### .csv 文件的自定义 NULL 编码
<a name="custom-null-encoding"></a>

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

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

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

### C3R 如何解释 .csv 条目
<a name="interpretation-csv-entries"></a>

下表举例说明了如何根据为 `--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 文件
<a name="csv-file-no-headers"></a>

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

位置加密架构按位置而不是按名称指定输出列。映射加密架构将源列名映射到目标列名。有关更多信息，包括两种架构格式的详细讨论和示例，请参阅[映射和定位表架构](create-schema.md#mapped-and-positional-schemas)。

## Parquet 文件
<a name="parquet-file-type"></a>

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

### 支持的 Parquet 数据类型
<a name="supported-parquet-data-types"></a>

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

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

支持以下 Parquet 数据类型：
+ 带以下逻辑注释的 `Binary` 基本类型：
  + 如果已设置 `--parquetBinaryAsString`（`STRING` 数据类型），则为 None
  + `Decimal(scale, precision)`（`DECIMAL` 数据类型）
  + `String`（`STRING` 数据类型）
+ 不带逻辑注释的 `Boolean` 基本数据类型（`BOOLEAN` 数据类型）
+ 不带逻辑注释的 `Double` 基本数据类型（`DOUBLE` 数据类型）
+ 带 `Decimal(scale, precision)` 逻辑注释的 `Fixed_Len_Binary_Array` 基本类型（`DECIMAL` 数据类型）
+ 不带逻辑注释的 `Float` 基本数据类型（`FLOAT` 数据类型）
+ 带以下逻辑注释的 `Int32` 基本类型：
  + 无（`INT` 数据类型）
  + `Date`（`DATE` 数据类型）
  + `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` 数据类型）

## 加密非字符串值
<a name="encrypt-non-string-values"></a>

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

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

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

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

例如，无论 `INTEGRAL` 值 `42` 最初是 `SMALLINT`、`INT` 还是 `BIGINT`，都将为其分配相同的指纹。此外，`INTEGRAL` 值 `0` 永远不会与 `BOOLEAN` 值 `FALSE` 匹配（由值 `0` 表示）。

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


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