amazon-dynamodb - query - dynamodb scan count
¿Es posible ORDENAR resultados con consulta o escaneo en DynamoDB? (4)
No explícitamente, sin embargo, el ordenamiento es obviamente necesario para muchos casos de uso del mundo real y se puede modelar por medio de la clave principal de tipo hash y rango en consecuencia:
En este caso, la clave primaria está compuesta de dos atributos. Los primeros atributos son el atributo hash y el segundo es el atributo range. Amazon DynamoDB crea un índice de hash desordenado en el atributo de clave principal de hash y un índice de rango ordenado en el atributo de clave principal de rango . [énfasis mío]
Luego puede usar este índice de rango para opcionalmente solicitar elementos a través del parámetro RangeKeyCondition de Query API y especificar el recorrido hacia delante o hacia atrás del índice (es decir, la dirección de clasificación) a través del parámetro ScanIndexForward .
Actualización: puede ordenar por un atributo con un índice secundario local de la misma manera.
¿Es posible ORDENAR resultados con Query o Scan API en DynamoDB?
Necesito saber si DynamoDB tiene algo así como [ORDER BY ''field''] de consultas SQL?
Gracias.
Puede usar la clave de clasificación y aplicar el parámetro ScanIndexForward en una query para ordenar en orden ascendente o descendente. Aquí limito los artículos devueltos a 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));
}
});
Si está utilizando boto2 y tiene la clave de clasificación en una de las columnas de su tabla, puede ordenar lo que recupera en orden o en orden inverso diciendo:
result = users.query_2(
account_type__eq=''standard_user'',
reverse=True)
Si está utilizando boto3 y tiene la clave de clasificación en la columna para la que desea ordenar el resultado, puede ordenar los datos que recupera diciendo:
result = users.query(
KeyConditionExpression=Key(''account_type'').eq(''standard_user''),
ScanIndexForward=True)
Recuerde que en boto3 si ScanIndexForward es verdadero, DynamoDB devuelve los resultados en el orden en el que están almacenados (por valor de clave de clasificación). Este es el comportamiento predeterminado. Si ScanIndexForward es falso, DynamoDB lee los resultados en orden inverso ordenando el valor de la clave, y luego devuelve los resultados al cliente.
Utilice ScanIndexForward (verdadero para ascendente y falso para descendente) y también puede limitar el resultado utilizando el valor setLimit de Query Expression.
A continuación, encontrará el código donde se utilizó QueryPage para encontrar el registro individual.
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());
}
}