Vis*_*hal 19 boto amazon-dynamodb
什么是DynamoDB相当于
SELECT MAX(RANGE_KEY) FROM MYTABLE WHERE PRIMARYKEY = "value"
Run Code Online (Sandbox Code Playgroud)
我能想到的最好的是
from boto.dynamodb2.table import Table as awsTable
tb = awsTable("MYTABLE")
rs = list(tb.query_2(PRIMARYKEY__eq="value", reverse=True, limit=1))
MAXVALUE = rs[0][RANGE_KEY]
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
bsd*_*bsd 13
这是正确的方法.
由于哈希键匹配的记录按范围键排序,因此通过后代顺序获取第一个记录将为您提供具有最大范围键的记录.
查询结果始终按范围键排序.如果范围键的数据类型是Number,则以数字顺序返回结果; 否则,结果按ASCII字符代码值的顺序返回.默认情况下,排序顺序为升序.要反转顺序,请使用ScanIndexForward参数设置为false.
查询和扫描操作 - Amazon DynamoDB:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html
注意:reverse通过boto API 将参数设置为true等同于ScanIndexForward通过本机AWS API 设置为false.
小智 5
如果有人在寻找如何用Java做到这一点:
QuerySpec querySpec = new QuerySpec();
querySpec.withKeyConditionExpression("PRIMARYKEY = :key")
.withValueMap(new ValueMap()
.withString(":key", primaryKeyValue));
querySpec.withScanIndexForward(true);
querySpec.withMaxResultSize(1);
Run Code Online (Sandbox Code Playgroud)
在 boto3 中,您可以这样做:
import boto3
from boto3.dynamodb.conditions import Key, Attr
kce = Key('table_id').eq(tableId) & Key('range').between(start, end)
output = table.query(KeyConditionExpression = kce, ScanIndexForward = False, Limit = 1)
Run Code Online (Sandbox Code Playgroud)
输出包含与开始和结束之间范围的最大值关联的行。对于最小值更改ScanIndexForward为True
| 归档时间: |
|
| 查看次数: |
18105 次 |
| 最近记录: |