在创建 DynamoDB 表时,通过 AWS-CLI 并使用 JSON 框架定义 StringSet Attribute



我正在尝试从命令行为 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 数据库,并且是无模式的,这意味着, 除主键属性外,无需定义任何 创建表时的属性或数据类型。

最新更新