具有本地二级索引的AWS DynamoDB查询(PHP)

时间:2014-04-22 01:10:35

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

尝试使用我的本地二级索引进行查询....如果我没有指定HashRangeKey,我会收到错误消息,说明它是必需的。如果我添加它,那么它会忽略范围条件。

查询似乎在AWS" Table Explorer"中工作正常,所以我认为这只是一个简单的错误或与库有关。

验证错误:[HashKeyValue]是必需对象:复合主键的哈希组件的属性值。

array(
      'TableName'=>self::$_tableName,
      'IndexName'=>'vote-index',
      'KeyConditions' => array(
        'itemId' => array(
          'ComparisonOperator' => 'EQ',
          'AttributeValueList' => array(
            array('N'=>$itemId),
          ),
        ),
        'vote' => array(
          'ComparisonOperator' => 'EQ',
          'AttributeValueList' => array(
            array('N'=>$vote),
          ),
        ),
      ),
      'Count' => true,
    )

*根据此处的代码:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LowLevelPHPQuerying.html我不需要HashKeyValue。

这会运行,但它只会为我提供由HashKeyValue

过滤的结果
array(
      'TableName'=>self::$_tableName,
      'IndexName'=>'vote-index',

      'HashKeyValue'=>array(
        'N'=>$itemId,
      ),
      'RangeKeyValue'=>array(
        'N'=>$vote,
      ),
)

错误:提供的关键元素与架构

不匹配
array(
      'TableName'=>self::$_tableName,
      'IndexName'=>'vote-index',

      'HashKeyValue'=>array(
        'N'=>$itemId,
      ),
      'RangeKeyCondition'=>array(
        'ComparisonOperator' => 'EQ',
        'AttributeValueList' => array(
          array('N'=>$vote),
        ),
      ),
)

1 个答案:

答案 0 :(得分:3)

This answer可能会有所帮助。

本地二级索引的功能类似于备用范围键...无论是查询表的主哈希键/范围键组合还是哈希键/本地二级索引,都必须指定一个哈希键(想想DynamoDB)作为一个大的哈希表......如果没有哈希键,就无法查看。)

来自DynamoDB Secondary Index Documentation(强调我的):

  

本地二级索引 - 与表具有相同哈希键的索引,但具有不同的范围键。本地二级索引是" local"从某种意义上说,本地二级索引的每个分区都限定为具有相同散列键的表分区。

如果要通过表中不是表的主哈希键的其他属性进行查询,则需要创建全局二级索引,这更像是备用表哈希键。遗憾的是,您只能在创建时指定索引,并且无法修改它们,因此您可能需要迁移表。