我是DynamoDB的新手,我来自RDBMS背景。有没有办法获得给定分区键(HASH)的所有sortkey(RANGE)。我对数据不感兴趣,只对排序键感兴趣。实现这一目标的有效方法是什么?
答案 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已经是表中的一列。