如何有效地获取给定分区键(HASH)的所有排序键?

时间:2017-09-16 03:44:56

标签: amazon-web-services amazon-dynamodb

我是DynamoDB的新手,我来自RDBMS背景。有没有办法获得给定分区键(HASH)的所有sortkey(RANGE)。我对数据不感兴趣,只对排序键感兴趣。实现这一目标的有效方法是什么?

4 个答案:

答案 0 :(得分:1)

我不知道是否可以按照您的要求完全执行操作,但您可以将排序键值添加为表格中的单独列。

在表格中有两个单独的列可能更简单,一个用于分区键,另一个用于范围/排序键。在分区键上创建二级索引以进行查询,然后从表示排序键的新列返回值。

答案 1 :(得分:1)

我假设HashKey&创建DynamoDB表时指定RangeKey。您可以使用DynamoDB Query API并在此API请求的AttributesToGet字段中指定范围键的列名称。请使用Query API中提供的分页支持,否则如果返回大量值,您的系统将会受到影响。

答案 2 :(得分:0)

您可以将KeyConditionExpression用作DynamoDB QueryAPI

的一部分

大致是您可以在python中完成的方式:

import boto3
from boto3.dynamodb.conditions import Key
from botocore.exceptions import ClientError

session = boto3.session.Session(region_name = 'us-east-1')
dynamodb = session.resource('dynamodb')

table_object = dynamodb.Table(table_name)

return_list = []

try:
    response = table_object.query(
        KeyConditionExpression = Key(partition_key_name).eq(partition_key_value),
        ProjectionExpression = sort_key_name
    )
except ClientError:
    return False

if 'Items' in response:
    for response_result in response['Items']:
        if sort_key_name in response_result:
            return_list.append(response_result.get(sort_key_name))

    return return_list
else:
    return False

已更新,感谢@Hernan建议包括ProjectionExpression

答案 3 :(得分:0)

您可以改进@Chris McLaughlin解决方案,在查询中添加ProjectionExpression属性。 ProjectionExpression必须是一个字符串,用于标识一个(“ attribute_name”)或多个属性(“ attribute_name1,attribute_name2”)以从表中检索。

response = table_object.query(
        KeyConditionExpression = Key(partition_key_name).eq(partition_key_value),
        ProjectionExpression = sort_key_name
    )

这将为您提供表中的所有sort_keys。不需要创建额外的列来执行此操作,因为sort_key已经是表中的一列。