AWS DynamoDB NodeJS Транзакции - Попытка создать 'перемещение' с помощью Put & Delete, но ValidationError - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь сделать простой транзакционный «перенос» данных из одной таблицы в другую в DynamoDB (для добавления индексов). Вот звонок, который я делаю, обещание возвращается, потому что я использую .then () для его интерпретации, но, как вы можете видеть из результата, который я получаю, есть что-то неправильно с моим JSON , К сожалению, сообщение об ошибке не очень полезно. Очень благодарен за любую помощь.

var runner = async (column1Value, column2Value) => {
  return await ddb.transactWriteItems({
    TransactItems: [
      {
        Delete: {
          TableName: 'TABLE_V2',
          Key: {
            AuthorName: {
              S: column1Value
            }
          }
        }
      }
      ,
      {
        Put: {
          Item: {
            'AuthorName': {
              S: column1Value
            },
            'AuthorTitle': {
              S: column2Value
            }
          },
          TableName: 'TABLE_V3'
        }
      }
    ]
  }).promise();
}

Когда я запускаю свой код, я получаю следующее:

    at Request.extractError...
  message: 'Transaction cancelled, please refer cancellation reasons for specific reasons [ValidationError, None]',
  code: 'TransactionCanceledException',
  time: 2019-03-31T00:03:05.401Z,
  requestId: 'URIARNJDVFHDVLQQNR1JMIJP5NVV4KQNSO5AEMVJF66Q9ASUAAJG',
  statusCode: 400,
  retryable: false,
  retryDelay: 30.057548210067033

Я прочитал несколько сайтов, но все ссылаются на время до того, как DynamoDB изначально поддерживал транзакции с помощью .transactWriteItems (). Например: Как поддерживать транзакции в DynamoDB с помощью Javascript AWS-SDK?

1 Ответ

0 голосов
/ 02 апреля 2019

Хорошо, возникли две проблемы (дайте мне знать, если они не имеют отношения к этому сайту).

  1. Ошибка 'Put' возникла из-за того, что был пробелсимвол после имени столбца для первого столбца: «AuthorName»
  2. Ошибка «Delete» была вызвана тем фактом, что TABLE_V2 использует не только первичный ключ, но и ключ поиска, поэтому его JSON необходимобыть:
Delete: {
  TableName: 'TABLE_V2',
  Key: {
    AuthorName: {
      S: column1Value
    },
    AuthorTitle: {
      S: column2Value
    }
  }
}
...