我正在尝试从命令行为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 }
但是,在pratcice中,cFlags
属性不是字符串,而是一组无序的字符串*。我读了here:
DynamoDB支持表示Number,String或Binary值集的类型。
然而,我读到here AttributeType
字段的选项只是标量字段:
属性类型 属性的数据类型,其中:
- S - 属性类型为String
- N - 属性为Number
B - 该属性的类型为Binary
类型:字符串
有效值: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
属性的一个潜在值。
答案 0 :(得分:0)
DynamoDB的关键属性应该是标量类型。您可以将非键属性设置为" SS" (即字符串集)。
但是,在创建表时,您不需要定义非键属性,因为DynamoDB是NoSQL数据库。此外,DynamoDB不允许定义创建表的表的非键属性。
当您尝试定义不属于密钥架构的任何属性时,它会抛出验证异常。
由于上述原因,字符串集" SS" 不能成为表创建脚本的一部分(因为它不会成为密钥模式的一部分)
主键属性(即分区和排序键)必须定义为 输入字符串,数字或二进制文件。
创建表或辅助索引时,必须指定 每个主键属性的名称和数据类型(分区键和 排序键)。此外,每个主键属性必须定义为 输入字符串,数字或二进制文件。
DynamoDB是一个NoSQL数据库,并且是无模式的,这意味着, 除主键属性外,您不需要定义任何属性 表创建时的属性或数据类型。