Запрос в DynamoDB с запросом ключа в get - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь выполнить этот запрос в локальной DynamoDB, но я не знаю, почему он не работает

Ошибка :

Невозможно прочитать вещь. Ошибка JSON: {"message": "Элемент схемы ключа пропущенного условия запроса", "code": "ValidationException", "time": "2020-04-13T23: 49: 24.297Z", "requestId": "99bcabdb -7168-4b26-8056-74482d92ac42 "," statusCode ": 400," retryable ": false," retryDelay ": 23.68974772992818}

Запрос

  var params = {
    TableName: TESTE,
    IndexName: 'indexCNPJ',
    KeyConditionExpression: 'cep = :cep',
    ExpressionAttributeValues: {
      ':cep': cep
    }
  };

  docClient.query(params, function (err, data) {
    if (err) {
      console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
      console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
      res.status(200).json(data)
    }
  }); ```

**Table** 

   ``` var params = {
    TableName : "TESTE",
    KeySchema: [
        { AttributeName: "CEP", KeyType: "HASH"},
        { AttributeName: "CNPJ", KeyType: "RANGE"}
    ],
    AttributeDefinitions: [
        { AttributeName: "CEP", AttributeType: "N" },
        { AttributeName: "CNPJ", AttributeType: "S" }
    ],
    GlobalSecondaryIndexes: [
        {
          IndexName: 'indexCNPJ',
          KeySchema: [
            { AttributeName: 'CEP', KeyType: 'HASH' },
            { AttributeName: 'CNPJ', KeyType: 'RANGE' }
          ],
          Projection: {
            ProjectionType: 'ALL'
          },
          ProvisionedThroughput: {
            ReadCapacityUnits: 10,
            WriteCapacityUnits: 10
          }
        }
      ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 10,
        WriteCapacityUnits: 10
    }
};

dynamodb.createTable(params, function(err, data) {
    if (err) {
        console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2));
    }
});

Единственное, что я хотел, - это просто передать при вызове сервиса параметр zip. Потому что невозможно создать таблицу только с почтовым индексом, так как HA SH состоит в том, что в записях есть дубликаты

enter image description here

At Во-первых, у меня есть только параметр CEP. Кто-нибудь знает, как я могу решить эту проблему?

1 Ответ

1 голос
/ 14 апреля 2020

Query condition missed key schema element это означает, что ваш запрос не включает ключ ha sh.

Ваша indexCNPJ схема индекса:

KeySchema: [
            { AttributeName: 'CEP', KeyType: 'HASH' },
            { AttributeName: 'CNPJ', KeyType: 'RANGE' }
          ],

Это означает, что CEP означает га sh ключ. Проверьте еще раз ваш запрос,

...
KeyConditionExpression: 'cep = :cep',
...

Он не включает ключ ha sh - CEP. Вы используете cep вместо CEP, после чего вы получите сообщение об ошибке.

Давайте исправим имя вашего атрибута в свойстве KeyConditionExpression:

...
KeyConditionExpression: 'CEP = :cep',
...

Кстати, indexCNPJ index имеет ту же схему, что и ваша схема индекса таблицы. Почему вам нужно создать индекс GSI так же, как и индекс таблицы? Я думаю, что это не обязательно. В этом случае просто запросите индекс таблицы без GSI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...