小编典典

键模式中的属性数必须与属性定义中定义的属性数匹配

all

我试图使用 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,它工作正常。在工作台下方:

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);
});

我不想将范围添加到键模式。知道如何解决吗?


阅读 58

收藏
2022-08-16

共1个答案

小编典典

TL;DR 不要在AttributeDefinitions.

DynamoDB 是无模式的(键模式除外)

也就是说,您确实需要在创建表时指定键模式(属性名称和类型)。好吧,您不需要指定任何非关键属性。您可以稍后放置具有任何属性的项目(当然必须包括键)。

文档页面AttributeDefinitions定义为:

描述表和索引的键模式的属性数组。

创建表时,该AttributeDefinitions字段仅用于哈希和/或范围键。在您的第一种情况下,当您提供 2 个
AttributeDefinitions 时,只有哈希键(数字 1)。这是异常的根本原因。

2022-08-16