什么是DynamoDB等效于
SELECT MAX(RANGE_KEY) FROM MYTABLE WHERE PRIMARYKEY = "value"
我能想到的最好的是
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]
有更好的方法吗?
答案 0 :(得分:11)
这是正确的方法。
因为哈希键匹配的记录按范围键排序,所以按照后代顺序获取第一个记录将为您提供具有最大范围键的记录。
查询结果始终按范围键排序。如果是数据类型 范围键是Number,结果以数字顺序返回; 否则,结果按ASCII字符代码的顺序返回 值。默认情况下,排序顺序为升序。扭转秩序 使用ScanIndexForward参数设置为false。
查询和扫描操作 - Amazon DynamoDB:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html
注意:通过boto API将reverse
参数设置为true等同于通过本机AWS API将ScanIndexForward
设置为false。
答案 1 :(得分:3)
如果有人正在研究如何使用Java:
QuerySpec querySpec = new QuerySpec();
querySpec.withKeyConditionExpression("PRIMARYKEY = :key")
.withValueMap(new ValueMap()
.withString(":key", primaryKeyValue));
querySpec.withScanIndexForward(true);
querySpec.withMaxResultSize(1);
答案 2 :(得分:0)
在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)
输出包含与在开始和结束之间的范围的“最大值”关联的行。对于最小值,将ScanIndexForward
更改为True