Dynamodb查询错误-不支持查询键条件

问题描述 投票:10回答:2

我正在尝试查询我的dynamodb表以获取feed_guid和status_id =1。但是它返回查询键条件不受支持的错误。请找到我的表架构并查询。

$result =$dynamodbClient->createTable(array(
            'TableName' => 'feed',
            'AttributeDefinitions' => array(
                array('AttributeName' => 'user_id', 'AttributeType' => 'S'),
                array('AttributeName' => 'feed_guid',    'AttributeType' => 'S'),
                array('AttributeName' => 'status_id',  'AttributeType' => 'N'),
            ),
            'KeySchema' => array(
                array('AttributeName' => 'feed_guid', 'KeyType' => 'HASH'),
            ),

            'GlobalSecondaryIndexes' => array(
                array(
                    'IndexName' => 'StatusIndex',
                    'ProvisionedThroughput' => array (
                        'ReadCapacityUnits' => 5,
                        'WriteCapacityUnits' => 5
                    ),
                    'KeySchema' => array(
                        array(
                            'AttributeName' => 'status_id',
                            'KeyType' => 'HASH'
                        ),
                    ),
                    'Projection' => array(
                        'ProjectionType' => 'ALL'
                    )
                ),

                array(
                    'IndexName' => 'UserIdIndex',
                    'ProvisionedThroughput' => array (
                        'ReadCapacityUnits' => 5,
                        'WriteCapacityUnits' => 5
                    ),
                    'KeySchema' => array(
                        array(
                            'AttributeName' => 'user_id',
                            'KeyType' => 'HASH'
                        ),
                    ),
                    'Projection' => array(
                        'ProjectionType' => 'ALL'
                    )
                )

            ),
            'ProvisionedThroughput' => array(
                'ReadCapacityUnits'  => 10,
                'WriteCapacityUnits' => 20
            )
        ));

以下是我的查询以更新该表。

 $result = $dynamodbClient->query(array(
            'TableName' => 'feed',
            'KeyConditionExpression' => 'feed_guid = :v_fid AND status_id = :v_sid ',
            'ExpressionAttributeValues' =>  array(
                ':v_fid' => array('S' => '71a27f0547cd5456d9ee7c181b6cb2f8'),
                ':v_sid' => array('N' => 1)
            ),
            'ConsistentRead' => false
        ));
amazon-web-services bigdata amazon-dynamodb
2个回答
9
投票

如上所述,“ KeyConditionExpression”中包含的属性应仅是您的哈希键,与您的基表模式匹配(在本例中为'feed_guid')。如果要同时查询“ feed_guid”和“ status_id”,则需要使用哈希键和范围键创建表,并指定“ status_id”作为范围键。

全局二级索引与基表完全分开,因此在这种情况下,您可以单独查询索引(查询StatusIndex时在关键条件下使用'status_id',查询UserIdIndex时在关键条件下使用'user_id')。

请查询有关查询全局二级索引here的更多详细信息>


0
投票

[另一个选择是除了KeyConditionExpression外,还使用FilterExpression。正如Daniela提到的,KeyConditionExpression应该仅在哈希键中包含列。但是,任何未索引的列都可以包含在FilterExpression中。

© www.soinside.com 2019 - 2024. All rights reserved.