我试图使用 DynamoDB JavaScript shell 创建一个简单的表,但我遇到了这个异常:
{ "message": "The number of attributes in key schema must match the number of attributes defined in attribute definitions.", "code": "ValidationException", "time": "2015-06-16T10:24:23.319Z", "statusCode": 400, "retryable": false }
下面是我试图创建的表:
var params = { TableName: 'table_name', KeySchema: [ { AttributeName: 'hash_key_attribute_name', KeyType: 'HASH' } ], AttributeDefinitions: [ { AttributeName: 'hash_key_attribute_name', AttributeType: 'S' }, { AttributeName: 'attribute_name_1', AttributeType: 'S' } ], ProvisionedThroughput: { ReadCapacityUnits: 1, WriteCapacityUnits: 1 } }; dynamodb.createTable(params, function(err, data) { if (err) print(err); else print(data); });
但是,如果我将第二个属性添加到KeySchema,它工作正常。在工作台下方:
KeySchema
var params = { TableName: 'table_name', KeySchema: [ { AttributeName: 'hash_key_attribute_name', KeyType: 'HASH' }, { AttributeName: 'attribute_name_1', KeyType: 'RANGE' } ], AttributeDefinitions: [ { AttributeName: 'hash_key_attribute_name', AttributeType: 'S' }, { AttributeName: 'attribute_name_1', AttributeType: 'S' } ], ProvisionedThroughput: { ReadCapacityUnits: 1, WriteCapacityUnits: 1 } }; dynamodb.createTable(params, function(err, data) { if (err) print(err); else print(data); });
我不想将范围添加到键模式。知道如何解决吗?
TL;DR 不要在AttributeDefinitions.
AttributeDefinitions
DynamoDB 是无模式的(键模式除外)
也就是说,您确实需要在创建表时指定键模式(属性名称和类型)。好吧,您不需要指定任何非关键属性。您可以稍后放置具有任何属性的项目(当然必须包括键)。
从文档页面,AttributeDefinitions定义为:
描述表和索引的键模式的属性数组。
创建表时,该AttributeDefinitions字段仅用于哈希和/或范围键。在您的第一种情况下,当您提供 2 个 AttributeDefinitions 时,只有哈希键(数字 1)。这是异常的根本原因。