Ich versuche, eine einfache Tabelle mit der DynamoDB-Javascript-Shell zu erstellen, und erhalte die folgende Ausnahme:
{
"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
}
Unten ist die Tabelle, die ich erstellen möchte:
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);
});
Wenn ich jedoch das zweite Attribut zum keySchema hinzufüge, funktioniert es einwandfrei. Unterhalb des Arbeitstisches:
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);
});
Ich möchte den Bereich nicht zum Schlüsselschema hinzufügen. Irgendeine Idee, wie man das behebt?
amazon-dynamodb
dynamo-local
NAbbas
quelle
quelle
Antworten:
DynamoDB ist schemenlos (mit Ausnahme des Schlüsselschemas)
Das heißt, Sie müssen das Schlüsselschema (Attributname und -typ) angeben, wenn Sie die Tabelle erstellen. Nun, Sie müssen keine Nicht-Schlüsselattribute angeben. Sie können später ein Element mit einem beliebigen Attribut einfügen (muss natürlich die Schlüssel enthalten).
Von der Dokumentationsseite , die
AttributeDefinitions
definiert ist als:Wenn Sie eine Tabelle erstellen, wird das
AttributeDefinitions
Feld nur für die Hash- und / oder Bereichsschlüssel verwendet. In Ihrem ersten Fall gibt es nur einen Hash-Schlüssel (Nummer 1), während Sie 2 AttributeDefinitions angeben. Dies ist die Hauptursache für die Ausnahme.TL; DR Fügen Sie keine Nicht-Schlüsselattributdefinitionen in ein
AttributeDefinitions
.quelle
AttributeDefinitions
wenn dieser Schlüssel alshash
oderrange
Schlüssel im Index verwendet wirdWenn Sie in at ein Nicht-Schlüsselattribut verwenden
"AttributeDefinitions"
, müssen Sie es als Index verwenden, da dies sonst die Funktionsweise von DynamoDB beeinträchtigt. Siehe den Link .Sie müssen also kein Nichtschlüsselattribut eingeben,
"AttributeDefinitions"
wenn Sie es nicht als Index oder Primärschlüssel verwenden möchten.quelle
Ich hatte auch dieses Problem und ich werde hier posten, was für mich schief gelaufen ist, falls es jemand anderem hilft.
In meinem
CreateTableRequest
hatte ich ein leeres Array für dieGlobalSecondaryIndexes
.Das Auskommentieren dieser Zeilen in der Tabellenerstellung löste mein Problem. Ich denke, die Liste muss
null
nicht leer sein.quelle