1. ホーム
  2. amazon-dynamodb

[解決済み] キースキーマの属性数は、属性定義で定義された属性数と一致する必要があります。

2022-04-22 03:53:37

質問事項

DynamoDBのJavaScriptシェルで簡単なテーブルを作成しようとしているのですが、この例外が発生します。

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

しかし、2つ目の属性を 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 .

DynamoDBはスキーマレス(キーのスキーマを除く)である

つまり、テーブルを作成する際にキーのスキーマ(属性名と型)を指定する必要があるのです。まあ、キー以外の属性は指定する必要はないんだけどね。後から任意の属性の項目を入れることができます(もちろんキーは含まなければなりません)。

から ドキュメントページ を使用します。 AttributeDefinitions は次のように定義されています。

テーブルとインデックスのキースキーマを記述する属性の配列です。

テーブルを作成する際に AttributeDefinitions フィールドは、ハッシュキーやレンジキーにのみ使用されます。最初のケースでは、2つのAttributeDefinitionを提供しながら、ハッシュ・キー(番号1)だけがあります。これが例外の根本的な原因です。