我正在尝试从命令行为 Amazon Web Service DynamoDB 定义一个表。
我已经使用以下 json 文件成功运行aws dynamodb create-table --cli-input-json file://tmp.json
:
1 {
2 "AttributeDefinitions": [
3 {
4 "AttributeName": "testCase",
5 "AttributeType": "S"
6 },
7 {
8 "AttributeName": "cFlags",
9 "AttributeType": "S"
10 }
11 ],
12 "TableName": "TestTable",
13 "KeySchema": [
14 {
15 "AttributeName": "testCase",
16 "KeyType": "HASH"
17 },
18 {
19 "AttributeName": "cFlags",
20 "KeyType": "RANGE"
21 }
22 ],
23 "ProvisionedThroughput": {
24 "ReadCapacityUnits": 1,
25 "WriteCapacityUnits": 1
26 }
27 }
然而,在实践中,cFlags
属性不是一个字符串,而是一组无序的字符串*。 我在这里读到:
DynamoDB 支持表示数字、字符串或二进制值集的类型。
然而,我在这里读到AttributeType
字段的选项只是标量选项:
属性类型 属性的数据类型,其中:
- S - 属性的类型为字符串
- N - 属性的类型为 Number
B - 属性的类型为二进制
类型:字符串
有效值:S |N |乙
必需:是
我尝试以各种方式定义cFlags
的属性类型,但似乎都不起作用:
"AttributeType": [ "S" ]
"AttributeType": "[ S ]"
"AttributeType": "SS"
有人可以解释一下我做得不对的地方以及在 DynamoDB 中做我想做的事情的正确方法是什么?
*一个例子是字符串-O -Werror
,如gcc
调用,如gcc -O -Werror src_file.c
。 无论gcc
用-O -Werror
调用还是-Werror -O
调用都没有区别。 因此,在我的用例中,无序集[ "-O", "-Werror" ]
定义了cFlags
属性的一个潜在值。
DynamoDB 的关键属性应该是标量类型。你可以有一个非键属性作为"SS"(即字符串集(。
但是,您在创建表时无需定义非键属性,因为 DynamoDB 是一个 NoSQL 数据库。此外,DynamoDB 不允许定义创建表的表的非键属性。
当您尝试定义不属于键架构的任何属性时,它会引发验证异常。
由于上述原因,字符串集"SS">不能成为表创建脚本的一部分(因为它不会成为键架构的一部分(。
主键属性(即分区键和排序键(必须定义为 键入字符串、数字或二进制。
创建表或二级索引时,必须指定 每个主键属性的名称和数据类型(分区键和 排序键(。此外,每个主键属性必须定义为 键入字符串、数字或二进制。
DynamoDB 是一个 NoSQL 数据库,并且是无模式的,这意味着, 除主键属性外,无需定义任何 创建表时的属性或数据类型。