

# 适用于 DynamoDB 的 Amazon S3 导入格式
<a name="S3DataImport.Format"></a>

DynamoDB 可以三种格式导入数据：CSV、DynamoDB JSON 和 Amazon Ion。

**Topics**
+ [CSV](#S3DataImport.Requesting.Formats.CSV)
+ [DynamoDB JSON](#S3DataImport.Requesting.Formats.DDBJson)
+ [Amazon Ion](#S3DataImport.Requesting.Formats.Ion)

## CSV
<a name="S3DataImport.Requesting.Formats.CSV"></a>

CSV 格式的文件由换行符分隔的多个项目组成。默认情况下，DynamoDB 会将导入文件的第一行解释为标头，并期望列以逗号分隔。您也可以定义要应用的标头，只要它们与文件中的列数匹配即可。如果显式定义标头，则文件的第一行将作为值导入。

**注意**  
从 CSV 文件导入时，除基表和二级索引的哈希范围和键之外的所有列都将作为 DynamoDB 字符串导入。

**转义双引号**

CSV 文件中存在的任何双引号字符都必须进行转义。如果未对它们进行转义（例如在以下示例中），则导入将失败：

```
id,value
"123",Women's Full "Length" Dress
```

如果使用两组双引号转义引号，则相同的导入将成功：

```
id,value
"""123""","Women's Full ""Length"" Dress"
```

文本在经过适当转义和导入后，它将与原始 CSV 文件中的显示效果相同：

```
id,value
"123",Women's Full "Length" Dress
```

**导入异构项目类型**

您可以使用单个 CSV 文件，将不同的项目类型导入到一个表中。定义一个标题行，其中包含您的所有项目类型的所有属性，对于不适用于给定项目的属性，则将其列留空。导入项目中的空列将被忽略，而不是存储为空字符串。

```
PK,SK,EntityType,Name,Email,OrderDate,Amount,ProductName,Quantity
USER#1,PROFILE,User,Alice,alice@example.com,,,,
USER#1,ORDER#2024-01-15,Order,,,2024-01-15,99.99,,
USER#1,ORDER#2024-02-10,Order,,,2024-02-10,149.50,,
PRODUCT#101,METADATA,Product,,,,,Laptop,50
PRODUCT#102,METADATA,Product,,,,,Mouse,200
USER#2,PROFILE,User,Bob,bob@example.com,,,,
USER#2,ORDER#2024-01-20,Order,,,2024-01-20,75.00,,
PRODUCT#103,METADATA,Product,,,,,Keyboard,150
USER#3,PROFILE,User,Charlie,charlie@example.com,,,,
PRODUCT#104,METADATA,Product,,,,,Monitor,30
```

在此示例中，用户配置文件、订单和产品共享同一个表。每种项目类型仅使用与其相关的列。

## DynamoDB JSON
<a name="S3DataImport.Requesting.Formats.DDBJson"></a>

DynamoDB JSON 格式的文件可能包含多个 Item 对象。每个单独对象采用 DynamoDB 的标准编组 JSON 格式，换行符用作项目分隔符。作为一项附加功能，原定设置情况下，支持将时间点导出作为导入源。

**注意**  
新行用作 DynamoDB JSON 格式的文件的项目分隔符，不应在项目对象中使用。

```
{"Item": {"Authors": {"SS": ["Author1", "Author2"]}, "Dimensions": {"S": "8.5 x 11.0 x 1.5"}, "ISBN": {"S": "333-3333333333"}, "Id": {"N": "103"}, "InPublication": {"BOOL": false}, "PageCount": {"N": "600"}, "Price": {"N": "2000"}, "ProductCategory": {"S": "Book"}, "Title": {"S": "Book 103 Title"}}}
{"Item": {"Authors": {"SS": ["Author1", "Author2"]}, "Dimensions": {"S": "8.5 x 11.0 x 1.5"}, "ISBN": {"S": "444-444444444"}, "Id": {"N": "104"}, "InPublication": {"BOOL": false}, "PageCount": {"N": "600"}, "Price": {"N": "2000"}, "ProductCategory": {"S": "Book"}, "Title": {"S": "Book 104 Title"}}}
{"Item": {"Authors": {"SS": ["Author1", "Author2"]}, "Dimensions": {"S": "8.5 x 11.0 x 1.5"}, "ISBN": {"S": "555-5555555555"}, "Id": {"N": "105"}, "InPublication": {"BOOL": false}, "PageCount": {"N": "600"}, "Price": {"N": "2000"}, "ProductCategory": {"S": "Book"}, "Title": {"S": "Book 105 Title"}}}
```

## Amazon Ion
<a name="S3DataImport.Requesting.Formats.Ion"></a>

[Amazon Ion](https://amzn.github.io/ion-docs/) 是一种类型丰富、自我描述的分层数据序列化格式，旨在解决设计面向服务的大型体系时每天面临的快速开发、解耦和效率挑战。

导入 Ion 格式的数据时，Ion 数据类型将映射到新 DynamoDB 表中的 DynamoDB 数据类型。


| 序列号 | Ion 到 DynamoDB 数据类型转换 | B | 
| --- | --- | --- | 
| `1` | `Ion Data Type` | `DynamoDB Representation` | 
| `2` | `string` | `String (s)` | 
| `3` | `bool` | `Boolean (BOOL)` | 
| `4` | `decimal` | `Number (N)` | 
| `5` | `blob` | `Binary (B)` | 
| `6` | `list (with type annotation $dynamodb_SS, $dynamodb_NS, or $dynamodb_BS)` | `Set (SS, NS, BS)` | 
| `7` | `list` | `List` | 
| `8` | `struct` | `Map` | 

Ion 文件中的项目由换行符分隔。每行以 Ion 版本标记开头，后跟一个 Ion 格式的项目。

**注意**  
在下面的示例中，为了提高可读性，我们在多行上对 Ion 格式文件中的项目进行了格式化。

```
$ion_1_0
[
  {
    Item:{
      Authors:$dynamodb_SS::["Author1","Author2"],
      Dimensions:"8.5 x 11.0 x 1.5",
      ISBN:"333-3333333333",
      Id:103.,
      InPublication:false,
      PageCount:6d2,
      Price:2d3,
      ProductCategory:"Book",
      Title:"Book 103 Title"
    }
  },
  {
    Item:{
      Authors:$dynamodb_SS::["Author1","Author2"],
      Dimensions:"8.5 x 11.0 x 1.5",
      ISBN:"444-4444444444",
      Id:104.,
      InPublication:false,
      PageCount:6d2,
      Price:2d3,
      ProductCategory:"Book",
      Title:"Book 104 Title"
    }
  },
  {
    Item:{
      Authors:$dynamodb_SS::["Author1","Author2"],
      Dimensions:"8.5 x 11.0 x 1.5",
      ISBN:"555-5555555555",
      Id:105.,
      InPublication:false,
      PageCount:6d2,
      Price:2d3,
      ProductCategory:"Book",
      Title:"Book 105 Title"
    }
  }
]
```