Возможно ли получить результаты ORDER с помощью Query или Scan API в DynamoDB?
Мне нужно знать, имеет ли DynamoDB что-то вроде [ORDER BY 'field] из SQL-запросов?
Спасибо.
Возможно ли получить результаты ORDER с помощью Query или Scan API в DynamoDB?
Мне нужно знать, имеет ли DynamoDB что-то вроде [ORDER BY 'field] из SQL-запросов?
Спасибо.
Однако явно не требуется упорядочивание, очевидно, для многих случаев использования в реальных условиях и может быть смоделировано с помощью основного ключа типа хэша и диапазона):
В этом случае первичный ключ состоит из двух атрибутов. Первый атрибутами является хэш-атрибут, а второй - диапазон атрибут. Amazon DynamoDB строит неупорядоченный хеш-индекс на хэше атрибут первичного ключа и индекс отсортированного диапазона в диапазоне основных ключевой атрибут. [акцент мой]
Затем вы можете использовать этот индекс диапазона для необязательного запроса элементов через параметр RangeKeyCondition API запросов и указать обратный или обратный обход индекса (т.е. направление сортировки ) через параметр ScanIndexForward.
Обновление: Вы можете заказать по атрибуту с локальным вторичным индексом таким же образом.
Вы можете использовать сортировку и применить параметр ScanIndexForward в query для сортировки в порядке возрастания или убывания. Здесь я ограничиваю элементы, возвращенные в 1.
var params = {
TableName: 'Events',
KeyConditionExpression: 'Organizer = :organizer',
Limit: 1,
ScanIndexForward: false, // true = ascending, false = descending
ExpressionAttributeValues: {
':organizer': organizer
}
};
docClient.query(params, function(err, data) {
if (err) {
console.log(JSON.stringify(err, null, 2));
} else {
console.log(JSON.stringify(data, null, 2));
}
});
Используйте ScanIndexForward (true для восходящего и false для нисходящего), а также можете ограничить результат, используя значение setLimit выражения запроса.
Ниже приведен код, где использовался QueryPage для поиска отдельной записи.
public void fetchLatestEvents() {
EventLogEntitySave entity = new EventLogEntitySave();
entity.setId("1C6RR7JM0JS100037_contentManagementActionComplete");
DynamoDBQueryExpression<EventLogEntitySave> queryExpression = new DynamoDBQueryExpression<EventLogEntitySave>().withHashKeyValues(entity);
queryExpression.setScanIndexForward(false);
queryExpression.withLimit(1);
queryExpression.setLimit(1);
List<EventLogEntitySave> result = dynamoDBMapper.queryPage(EventLogEntitySave.class, queryExpression).getResults();
System.out.println("size of records = "+result.size() );
}
@DynamoDBTable(tableName = "PROD_EA_Test")
public class EventLogEntitySave {
@DynamoDBHashKey
private String id;
private String reconciliationProcessId;
private String vin;
private String source;
}
public class DynamoDBConfig {
@Bean
public AmazonDynamoDB amazonDynamoDB() {
String accesskey = "";
String secretkey = "";
//
// creating dynamo client
BasicAWSCredentials credentials = new BasicAWSCredentials(accesskey, secretkey);
AmazonDynamoDB dynamo = new AmazonDynamoDBClient(credentials);
dynamo.setRegion(Region.getRegion(Regions.US_WEST_2));
return dynamo;
}
@Bean
public DynamoDBMapper dynamoDBMapper() {
return new DynamoDBMapper(amazonDynamoDB());
}
}
Если вы используете boto2, и у вас есть ключ сортировки на одном из столбцов в таблице, вы можете сортировать то, что вы получаете в порядке или в обратном порядке, говоря:
result = users.query_2(
account_type__eq='standard_user',
reverse=True)
Если вы используете boto3, и у вас есть ключ сортировки в столбце, для которого вы хотите отсортировать результат, вы можете отсортировать полученные данные, указав:
result = users.query(
KeyConditionExpression=Key('account_type').eq('standard_user'),
ScanIndexForward=True)
Помните в boto3, если ScanIndexForward истинно, DynamoDB возвращает результаты в том порядке, в котором они хранятся (по значению ключа сортировки). Это поведение по умолчанию. Если ScanIndexForward является ложным, DynamoDB считывает результаты в обратном порядке по значению ключа сортировки, а затем возвращает результаты клиенту.
Другим вариантом, который должен решить проблему, является
Это позволит сортировать любое значение вашей таблицы по мере необходимости. Это очень эффективный способ найти элементы таблицы с самым высоким рейтингом без необходимости получать весь запрос, а затем фильтровать его.