Как запросить одну запись с помощью AWS DynamoDB? Примеры кода не работают

Я взял пример кода с самых основ, и я все еще не могу получить одну запись по ключу. Вот мой базовый пример с nodejs (кредиты не включены в этот фрагмент):

var dynamodbClient = new AWS.DynamoDB.DocumentClient();

var params = {
    TableName: 'newsarticles',
    Key: { id: '068d1110-cd0c-11e8-a4d4-57cb772554a4' }
};

//log full dynamodb request object
console.log("request params: ", JSON.stringify(params));

//make dynamodb request
dynamodbClient.get(params, function(err, data) {
    if (err) {
        console.log("error: " + err)
    } else {
        console.log(data.Item);
    }
});

запуск этого кода выше примера дает мне следующую ошибку:

ValidationException: предоставленный ключевой элемент не соответствует схеме

мой набор данных легко вставляется, и записи в системе выглядят так:

{
  "added": 1539231216801,
  "description": "A number of ethics complaints filed against Supreme Court Justice Brett Kavanaugh have yet to be resolved and will be transferred to a new jurisdiction, Chief Justice John Roberts wrote in a letter Wednesday. ",
  "edited": 1539231216402,
  "id": "068d1110-cd0c-11e8-a4d4-57cb772554a4",
  "largeImageUrl": "https://fm.cnbc.com/applications/cnbc.com/resources/img/editorial/2018/10/09/105496148-1539094642099gettyimages-1047769784.1910x1000.jpeg",
  "newstitle": "Ethics complaints against Brett Kavanaugh have not been resolved yet",
  "newsurl": "https://www.cnbc.com/2018/10/10/ethics-complaints-against-brett-kavanaugh-have-not-been-resolved-yet.html",
  "posted": 1539231216402,
  "scrapeid": "05c3a690-cd0c-11e8-a4d4-57cb772554a4",
  "scrapes": [
    "05c3a690-cd0c-11e8-a4d4-57cb772554a4"
  ],
  "source": "www.cnbc.com",
  "type": "rate"
}

Таблица определяется следующим образом:

Название таблицы: статьи новостей

Первичный ключ раздела: id (строка)

Первичный ключ сортировки: добавлено (число)

Сообщение об ошибке на самом деле не говорит мне, в чем проблема. Может ли кто-нибудь увидеть, что не так в моем запросе? Есть ли другой способ диагностировать, что может отсутствовать или быть неправильным? Заранее спасибо, извините за вопрос NOOB, но я только начинаю работать с AWS DynamoDB.


person contractorwolf    schedule 13.10.2018    source источник


Ответы (1)


Вы не включаете полный первичный ключ, вам также необходимо указать ключ сортировки, added в этом случае

var params = {
    TableName: 'newsarticles',
    Key: {
      id: '068d1110-cd0c-11e8-a4d4-57cb772554a4',
      added: aNumberHere
    }
};

В качестве альтернативы, если вы пытаетесь получить всю запись с определенным идентификатором, вам нужно использовать запрос.

person cementblocks    schedule 13.10.2018
comment
Итак, если я включаю ключ сортировки, мне нужно использовать как первичный ключ, так и ключ сортировки? хм, я думал, что это было просто использовано для того, чтобы ускорить › или ‹ указанную дату для запросов (например, дополнительный бесплатный заказ индексатором). То, как вы должны создавать свои данные для DynaModb, сбивает с толку. Для всех остальных, читающих этот вопрос, его ответ выше действительно был проблемой. Маркировка. Спасибо @cementblocks! - person contractorwolf; 13.10.2018
comment
это то, что я тестировал и работал: var params = { TableName: 'newsarticles', Key: { id: '068d1110-cd0c-11e8-a4d4-57cb772554a4', added: 1539231216801 } }; - person contractorwolf; 13.10.2018
comment
эй @cementmixer, почему этот простой запрос индексированного первичного ключа занимает 250 мс? это кажется безумно длинным. В моей БД меньше 100 строк. - person contractorwolf; 13.10.2018
comment
Вероятно, задержка в сети и накладные расходы на подключение. Вы можете получить более быстрый ответ, если повторно используете соединения. Также задержка для получения не связана с количеством строк в таблице. У меня есть таблицы с более чем 500 млн строк, и задержка не увеличивается. - person cementblocks; 13.10.2018