Запрос наибольшего значения ключа Range на AWS DynamoDb

Что такое эквивалент 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]

Есть ли лучший способ сделать это?

Ответ 1

Это правильный путь.

Поскольку записи, согласованные с помощью хэш-ключа, сортируются по ключу диапазона, получение первого по порядку потомков даст вам запись с максимальным ключом диапазона.

Результаты запроса всегда сортируются клавишей диапазона. Если тип данных ключ диапазона - Number, результаты возвращаются в числовом порядке; в противном случае результаты возвращаются в порядке символьного кода ASCII значения. По умолчанию порядок сортировки возрастает. Отменить порядок используйте параметр ScanIndexForward для параметра false.

Операции запроса и сканирования - Amazon DynamoDB: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html

ПРИМЕЧАНИЕ. Установка параметра reverse в значение true через boto API эквивалентна установке ScanIndexForward на false через собственный API AWS.

Ответ 2

Если кто-то смотрит, как это сделать с Java:

QuerySpec querySpec = new QuerySpec();
        querySpec.withKeyConditionExpression("PRIMARYKEY = :key")
                .withValueMap(new ValueMap()
                        .withString(":key", primaryKeyValue));
        querySpec.withScanIndexForward(true); 
        querySpec.withMaxResultSize(1);