DynamoDB列出数据类型问题

时间:2018-02-15 14:05:59

标签: amazon-web-services amazon-dynamodb aws-php-sdk

根据这个doc,DynamoDB支持map(M)和list(L)类型,但是当我尝试创建一个(L)类型的表时,我收到错误:

  

ValidationException(client):检测到1个验证错误:值' L' at' 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 个答案:

答案 0 :(得分:1)

起初,我认为它可能是您正在使用的SDK版本。但是在阅读了一些文档之后,似乎在创建表时,任何AttributeDefinition的AttributeType只能是'S | N | B'之一(意思是'String','Number'或'Binary')。参考:PHP SDK DynamoDB AttributeDefinition

这是有道理的,因为无论如何都不能在KeySchema中使用List。因此,在创建表时无需为List定义属性。在创建表后,在表中放置或更新项时,您始终可以将此属性添加到所需的任何数据中。见这里:PHP SDK DynamoDB PutItem