Я пытаюсь создать простую таблицу с помощью оболочки javascript DynamoDB и получаю следующее исключение:
{
"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);
});
Я не хочу добавлять диапазон в схему ключей. Есть идеи, как это исправить?
Ответы:
DynamoDB не имеет схемы (кроме ключевой схемы)
Иными словами, вам нужно указать схему ключей (имя и тип атрибута) при создании таблицы. Что ж, вам не нужно указывать какие-либо неключевые атрибуты. Позже вы можете поместить элемент с любым атрибутом (конечно, с ключами).
На странице документации , то
AttributeDefinitions
определяется как:Когда вы создаете таблицу,
AttributeDefinitions
поле используется только для ключей хеша и / или диапазона. В вашем первом случае есть только хеш-ключ (номер 1), а вы предоставляете 2 AttributeDefinitions. Это основная причина исключения.TL; DR Не включайте определения неключевых атрибутов в
AttributeDefinitions
.источник
AttributeDefinitions
если этот ключ будет использоваться в качестве ключаhash
илиrange
в индексеКогда вы используете неключевой атрибут в at
"AttributeDefinitions"
, вы должны использовать его как индекс, иначе это противоречит принципу работы DynamoDB. См. Ссылку .Поэтому не нужно добавлять неключевой атрибут,
"AttributeDefinitions"
если вы не собираетесь использовать его в качестве индекса или первичного ключа.источник
У меня тоже была эта проблема, и я опубликую здесь, что у меня пошло не так, если это поможет кому-то другому.
В моем у
CreateTableRequest
меня был пустой массив дляGlobalSecondaryIndexes
.Комментирование этих строк при создании таблицы решило мою проблему. Так что я полагаю, что список должен быть
null
не пустым.источник