Проблема с типом данных списка DynamoDB
Согласно этому документу, DynamoDB поддерживает типы карт (M) и списков (L), но когда я пытаюсь создать таблицу с типом (L), я получаю сообщение об ошибке:
ValidationException (клиент): 1 обнаружена ошибка проверки: значение 'L' в 'attributeDefinitions.2.member.attributeType' не удовлетворяет ограничению: элемент должен удовлетворять заданному значению перечисления: [B, N, S]
Это происходит после добавления ThreadReplyIds
Атрибут для таблицы информации:
[
'AttributeDefinitions' => [
[
'AttributeName' => 'UserId',
'AttributeType' => 'N',
],
[
'AttributeName' => 'ThreadReplyIds', // <<---
'AttributeType' => 'L',
],
[
'AttributeName' => 'Title',
'AttributeType' => 'S',
],
],
'KeySchema' => [
[
'AttributeName' => 'UserId',
'KeyType' => 'HASH',
],
[
'AttributeName' => 'Title',
'KeyType' => 'RANGE',
],
],
'ProvisionedThroughput' => [
'ReadCapacityUnits' => 5,
'WriteCapacityUnits' => 5,
],
'TableName' => 'Thread',
]
Моя цель - сохранить список или набор целочисленных значений для ThreadReplyIds
, Что я делаю неправильно?
1 ответ
Сначала я подумал, что это может быть версия SDK, которую вы используете. Но после некоторого прочтения документации кажется, что при создании таблицы AttributeType для любого AttributeDefinition может быть только одним из 'S|N|B' (что означает 'String', 'Number' или 'Binary'). Ссылка: PHP SDK DynamoDB AttributeDefinition.
Это имеет смысл, поскольку вы все равно не можете использовать List в своей KeySchema. Поэтому нет необходимости определять атрибут для вашего списка при создании таблицы. Вы всегда можете добавить этот атрибут к любым данным, которые вы хотите, при добавлении или обновлении элементов в таблице после ее создания. Смотрите здесь: PHP SDK DynamoDB PutItem