View a markdown version of this page

适用于 DynamoDB 的 Amazon S3 导入格式 - Amazon DynamoDB

适用于 DynamoDB 的 Amazon S3 导入格式

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

CSV

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

DynamoDB 遵循标准的 CSV 加引号惯例(RFC 4180):对于字段值内的双引号,通过在前面加上另一个双引号 ("") 进行转义。虽然反斜杠转义 (\") 在编程语言和许多数据导出工具的输出中很常见,但在此处无法识别,使用反斜杠的文件将无法导入。如果源数据使用反斜杠转义,请先将每个转义的引号改为使用双引号,然后再导入。例如,一个值导出为:

"Women's \"Full Length\" Dress"

必须按如下所示重新格式化,然后才能导入:

"Women's ""Full Length"" Dress"

格式化键值

在 DynamoDB 中,主键可以是简单主键(分区键)或复合主键(分区键和排序键)。每个键属性都包含一个单标量值。如果您想要一个组合多个字段的键值(例如,将 organizationIdbarcode 用分隔符联接为 organizationId#barcode),则可以将这些字段连接成一个字符串,然后将其存储在单个键属性中。这种连接是一种应用惯例;DynamoDB 将键属性作为一个值来存储和匹配。

从 CSV 导入此数据时,请将完全联接的值放在单个列中,并且该列的标题要与键属性的名称匹配。请勿将各部分拆分为单独的列:导入操作会将每列映射到一个属性,并且不会将列连接成键值。例如,对于分区键属性名为 pk 且排序键属性名为 sk 的表:

pk,sk,barcode org123#ABC123,number#001,ABC123 org456#XYZ789,number#002,XYZ789

如果键值本身包含逗号分隔符,则将整个值用双引号括起来,例如 "org123,east#ABC123"

导入异构项目类型

您可以使用单个 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

DynamoDB JSON 格式的文件可能包含多个 Item 对象。每个单独对象采用 DynamoDB 的标准编组 JSON 格式,换行符用作项目分隔符。这是 JSON Lines(JSONL)格式:每行一个 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

Amazon Ion 是一种类型丰富、自我描述的分层数据序列化格式,旨在解决设计面向服务的大型体系时每天面临的快速开发、解耦和效率挑战。

导入 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" } } ]