Estoy tratando de crear una tabla simple usando el shell javascript de DynamoDB y obtengo esta excepción:
{
"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
}
A continuación se muestra la tabla que estoy tratando de crear:
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);
});
Sin embargo, si agrego el segundo atributo a keySchema, funciona bien. Debajo de la mesa de trabajo:
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);
});
No quiero agregar el rango al esquema de claves. ¿Alguna idea de cómo arreglarlo?
amazon-dynamodb
dynamo-local
NAbbas
fuente
fuente
Respuestas:
DynamoDB no tiene esquema (excepto el esquema de clave)
Es decir, necesita especificar el esquema de clave (nombre y tipo de atributo) cuando crea la tabla. Bueno, no es necesario que especifique ningún atributo que no sea clave. Puedes poner un artículo con cualquier atributo más adelante (debes incluir las claves por supuesto).
Desde la página de documentación ,
AttributeDefinitions
se define como:Cuando crea una tabla, el
AttributeDefinitions
campo se usa solo para las claves hash y / o de rango. En su primer caso, solo hay una clave hash (número 1) mientras proporciona 2 AttributeDefinitions. Ésta es la causa raíz de la excepción.TL; DR No incluya definiciones de atributos que no sean clave en
AttributeDefinitions
.fuente
AttributeDefinitions
si esa clave se usará como clavehash
orange
en el índiceCuando usa un atributo que no es clave en at
"AttributeDefinitions"
, debe usarlo como índice; de lo contrario, va en contra del funcionamiento de DynamoDB. Vea el enlace .Por lo tanto, no es necesario colocar un atributo que no sea de clave
"AttributeDefinitions"
si no lo va a usar como índice o clave principal.fuente
También tuve este problema y publicaré aquí lo que me salió mal en caso de que ayude a otra persona.
En mi
CreateTableRequest
, tenía una matriz vacía paraGlobalSecondaryIndexes
.Comentar estas líneas en la creación de la tabla resolvió mi problema. Así que supongo que la lista debe estar
null
vacía.fuente