Czy można zamówić wyniki za pomocą zapytania lub skanowania API w DynamoDB?Czy można zamówić wyniki z zapytaniem lub skanować w DynamoDB?
Muszę wiedzieć, czy DynamoDB ma coś takiego jak [ORDER BY "pole"] z zapytań SQL?
Dzięki.
Czy można zamówić wyniki za pomocą zapytania lub skanowania API w DynamoDB?Czy można zamówić wyniki z zapytaniem lub skanować w DynamoDB?
Muszę wiedzieć, czy DynamoDB ma coś takiego jak [ORDER BY "pole"] z zapytań SQL?
Dzięki.
nie są wyraźnie jednak kolejność jest oczywiście potrzebne dla wielu przypadków użycia świata rzeczywistego i może być modelowane za pomocą Odpowiednio Hash and Range Type Primary Key:
W tym przypadku klucz podstawowy składa się z dwóch atrybutów. Pierwsze atrybuty są atrybutami mieszającymi, a drugim atrybutem jest zakres . Amazon DynamoDB tworzy nieuporządkowany indeks mieszania dla atrybutu klucza podstawowego hash i indeksu zakresu sortowanego w zakresie podstawowego atrybutu klucza . [podkr]
Następnie można użyć tego indeksu zakres opcjonalnie elementy żądania przez parametru RangeKeyCondition na Query API i określić przód lub w tył przechodzenie indeksu (czyli kierunek sortowania) poprzez Parametr ScanIndexForward .
Aktualizacja: Możesz zamówić według atrybutu z local secondary index w ten sam sposób.
Można użyć sortowania klucz i zastosować parametr ScanIndexForward w query do sortowania w porządku rosnącym lub malejącym. Tutaj ograniczę rzeczy wracać do 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));
}
});
Problem polega na tym, że chcesz zwrócić * wszystkie * przedmioty. Zasadniczo oznacza to, że musisz utworzyć nową kolumnę fikcyjną, przypisać tę samą wartość do wszystkich wierszy, utworzyć GSI w tej kolumnie i zapytanie wywołania zamiast skanowania. – JHH
Jeśli używasz boto2 i masz klucz sortowania na jednej z kolumn w tabeli można sortować czego pobierać w kolejności lub w odwrotnej kolejności przez mówiąc:
result = users.query_2(
account_type__eq='standard_user',
reverse=True)
Jeśli używasz boto3 i masz klucz sortowania na kolumny, które chcesz posortować wynik przez można sortować dane pobieraniu mówiąc:
result = users.query(
KeyConditionExpression=Key('account_type').eq('standard_user'),
ScanIndexForward=True)
Zapamiętaj w boto3, jeśli ScanIndexForward jest prawdziwe, DynamoDB zwraca wyniki w kolejności, w jakiej są przechowywane (według wartości klucza sortowania). To jest domyślne zachowanie. Jeśli wartość ScanIndexForward jest nieprawidłowa, DynamoDB odczytuje wyniki w kolejności odwrotnej, sortując wartość klucza, a następnie zwraca wyniki do klienta.
Zastosowanie ScanIndexForward (true dla rosnącej i malejącej false), a także może ograniczyć wynik używając wartości setLimit wypowiedzi Query.
Poniżej znajduje się kod, w którym używana jest strona QueryPage do wyszukiwania pojedynczego rekordu.
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());
}
}
Użyj ScanIndexForward (prawda dla rosnącej i fałszywa dla malejącej) –
ScanIndexForward param wydaje się mieć zastosowanie wyłącznie do [] (http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_Query.html Query), nie [Scan] (http: // docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_Scan.html) czy to prawda? Jak można zwrócić uporządkowaną listę stronicowanych wszystkich elementów w tabeli za pomocą Query? Skanowanie wydaje się być sposobem na zwrócenie "*", ale wydaje się, że nie ma paramu do porządkowania wyników. – case2000
Nie korzystałem z tej funkcji, czytam tylko o tym, ale Query obsługuje określenie [Limit] (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#ScanQueryLimit), aby ograniczyć liczba otrzymanych wyników i jeśli po osiągnięciu limitu pojawi się więcej elementów pasujących do zapytania, otrzymasz wartość _LastEvaluatedKey_, która może być użyta do wykonania innego zapytania i zachowania wyników wyszukiwania. – fernio