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]
これを行うより良い方法はありますか?
それが正しい方法です。
ハッシュキーで一致したレコードは範囲キーで並べ替えられるため、最初のレコードを子孫順に取得すると、最大範囲キーを持つレコードが得られます。
クエリ結果は常に範囲キーでソートされます。範囲キーのデータ型が数値の場合、結果は数値順に返されます。それ以外の場合、結果はASCII文字コード値の順序で返されます。デフォルトでは、ソート順は昇順です。順序を逆にするには、ScanIndexForwardパラメータをfalseに設定します。
クエリとスキャン操作-Amazon DynamoDB: http://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html
注:boto APIを介してreverse
パラメータをtrueに設定することは、ネイティブAWS APIを介してScanIndexForward
をfalseに設定することと同等です。
Javaでそれを行う方法を探している人がいる場合:
QuerySpec querySpec = new QuerySpec();
querySpec.withKeyConditionExpression("PRIMARYKEY = :key")
.withValueMap(new ValueMap()
.withString(":key", primaryKeyValue));
querySpec.withScanIndexForward(true);
querySpec.withMaxResultSize(1);
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
に変更します