Saya mencoba membuat tabel sederhana menggunakan shell javascript DynamoDB dan saya mendapatkan pengecualian ini:
{
"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
}
Di bawah ini adalah tabel yang saya coba buat:
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);
});
Namun jika saya menambahkan atribut kedua ke keySchema, itu berfungsi dengan baik. Di bawah meja kerja:
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);
});
Saya tidak ingin menambahkan rentang ke skema kunci. Tahu bagaimana cara memperbaikinya?
amazon-dynamodb
dynamo-local
NAbbas
sumber
sumber
Jawaban:
DynamoDB tidak memiliki skema (kecuali skema kunci)
Artinya, Anda perlu menentukan skema kunci (nama dan jenis atribut) saat Anda membuat tabel. Nah, Anda tidak perlu menentukan atribut non-kunci apa pun. Anda bisa meletakkan item dengan atribut apapun nanti (harus menyertakan kunci tentunya).
Dari halaman dokumentasi ,
AttributeDefinitions
didefinisikan sebagai:Saat Anda membuat tabel,
AttributeDefinitions
bidang hanya digunakan untuk hash dan / atau kunci rentang. Dalam kasus pertama Anda, hanya ada kunci hash (nomor 1) saat Anda memberikan 2 AttributeDefinitions. Ini adalah akar penyebab pengecualian.TL; DR Jangan menyertakan definisi atribut non-kunci apa pun dalam
AttributeDefinitions
.sumber
AttributeDefinitions
jika kunci itu akan digunakan sebagaihash
ataurange
kunci dalam indeksSaat Anda menggunakan atribut non-key di di
"AttributeDefinitions"
, Anda harus menggunakannya sebagai indeks, jika tidak, ini bertentangan dengan cara kerja DynamoDB. Lihat linknya .Jadi tidak perlu memasukkan atribut non-key
"AttributeDefinitions"
jika Anda tidak akan menggunakannya sebagai indeks atau kunci utama.sumber
Saya juga mengalami masalah ini dan saya akan memposting di sini apa yang salah untuk saya seandainya itu membantu orang lain.
Di saya
CreateTableRequest
, saya memiliki array kosong untuk fileGlobalSecondaryIndexes
.Mengomentari baris-baris ini dalam pembuatan tabel memecahkan masalah saya. Jadi saya rasa daftarnya harus
null
, tidak kosong.sumber