通过AWS-CLI和JSON骨架

时间:2017-07-18 12:39:51

标签: amazon-web-services amazon-dynamodb aws-cli

我正在尝试从命令行为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属性的一个潜在值。

1 个答案:

答案 0 :(得分:0)

DynamoDB的关键属性应该是标量类型。您可以将非键属性设置为" SS" (即字符串集)。

但是,在创建表时,您不需要定义非键属性,因为DynamoDB是NoSQL数据库。此外,DynamoDB不允许定义创建表的表的非键属性。

当您尝试定义不属于密钥架构的任何属性时,它会抛出验证异常

由于上述原因,字符串集" SS" 不能成为表创建脚本的一部分(因为它不会成为密钥模式的一部分)

  

主键属性(即分区和排序键)必须定义为   输入字符串,数字或二进制文件。

     

创建表或辅助索引时,必须指定   每个主键属性的名称和数据类型(分区键和   排序键)。此外,每个主键属性必须定义为   输入字符串,数字或二进制文件。

     

DynamoDB是一个NoSQL数据库,并且是无模式的,这意味着,   除主键属性外,您不需要定义任何属性   表创建时的属性或数据类型。