Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services dynamodb如何仅通过排序键进行查询?_Amazon Web Services_Amazon Dynamodb_Boto3 - Fatal编程技术网

Amazon web services dynamodb如何仅通过排序键进行查询?

Amazon web services dynamodb如何仅通过排序键进行查询?,amazon-web-services,amazon-dynamodb,boto3,Amazon Web Services,Amazon Dynamodb,Boto3,我已经编写了一些python代码,我想通过排序键查询dynamoDB数据。 我记得我可以成功使用后续代码: table.query(KeyConditionExpression=Key('event_status').eq(event_status)) “我的表结构”列 primary key:event_id sort key: event_status 如果您希望从DynamoDB获取数据而不使用Hash Key属性值,那么应该使用scan API 示例:- fe = Attr('ev

我已经编写了一些python代码,我想通过排序键查询dynamoDB数据。 我记得我可以成功使用后续代码:

 table.query(KeyConditionExpression=Key('event_status').eq(event_status))
“我的表结构”列

primary key:event_id
sort key: event_status

如果您希望从DynamoDB获取数据而不使用Hash Key属性值,那么应该使用scan API

示例:-

fe = Attr('event_status').eq("new");

response = table.scan(
        FilterExpression=fe        
    )

for i in response['Items']:

print(json.dumps(i, cls=DecimalEncoder))

while 'LastEvaluatedKey' in response:
    response = table.scan(        
        FilterExpression=fe,        
        ExclusiveStartKey=response['LastEvaluatedKey']
        )

    for i in response['Items']:
        print(json.dumps(i, cls=DecimalEncoder))

您必须为排序键创建全局二级索引(GSI),以便单独对其进行查询。

通过使用FilterExpression,我们可以使用排序键扫描表 注意:此处last updated是排序键

例如:

from_date = "fromdate"
to_date = "todate"

dynamodb = boto3.resource('dynamodb', region_name='ap-south-1')
table = dynamodb.Table("your-tablename")
response =table.scan(
    FilterExpression=Attr('LastUpdated').between(from_date,to_date))
    )
result = response['Items']

dynamodb中的查询只能使用主键完成

dynamodb = boto3.resource('dynamodb', region_name='your region name')
table = dynamodb.Table('database-dev')
response = table.query(KeyConditionExpression=Key('your primary key').eq("condition"))
但如果主密钥同时包含散列键和排序键,那么我们可以像这样使用散列键

dynamodb = boto3.resource('dynamodb', region_name='your region name')
table = dynamodb.Table('database-dev')
response = table.query(KeyConditionExpression=Key('your hash key').eq("condition"))

请注意,扫描与查询不同。您将对所有值进行迭代,因此它的效率远远低于查询。如果您确实需要对<代码>事件-状态> /代码>进行有效的查询,您应该考虑为该字段创建一个GSI。这是不正确的,需要创建GSI,不能单独查询排序关键字。LSI是一个额外的LSI@Madeo,我试图编辑答案并更正它。这两段代码都是相同的!您的答案文本表明它们应该不同?请小心,这只会过滤从原始查询返回的1MB数据。来自文档:“在查询完成后,但在返回结果之前应用筛选表达式”