Ist es möglich, einen exklusiven Startschlüssel anzugeben, wenn eine DynamoDB-Tabelle über globalen sekundären Index abgefragt wird?DynamoDB Globaler sekundärer Index mit exklusivem Startschlüssel
Ich benutze die aws-java-sdk Version 1.6.10 und Ausführen von Abfragen mit einem QueryExpression
und einem DynamoDBMapper
. Hier ist der Kern dessen, was ich versuche zu tun:
MappedItem key = new MappedItem();
item.setIndexedAttribute(attributeValue);
Map<String, AttributeValue> exclusiveStartKey = new HashMap<String, AttributeValue>();
exclusiveStartKey.put(MappedItem.INDEXED_ATTRIBUTE_NAME, new AttributeValue().withS(attributeValue));
exclusiveStartKey.put(MappedItem.TIMESTAMP, new AttributeValue().withN(startTimestamp.toString()));
DynamoDBQueryExpression<MappedItem> queryExpression = new DynamoDBQueryExpression<MappedItem>();
queryExpression.withIndexName(MappedItem.INDEX_NAME);
queryExpression.withConsistentRead(Boolean.FALSE);
queryExpression.withHashKeyValues(key);
queryExpression.setLimit(maxResults * 2);
queryExpression.setExclusiveStartKey(exclusiveStartKey);
Daraus ergibt sich eine 400 Fehlermeldung, dass der angegebene Starttaste ungültig ist. Der TIMESTAMP ist der Bereichsschlüssel für den Tabellenindex und den globalen Sekundärindex, und das Attributwertpaar ist gültig (dh es gibt ein Element in der Tabelle, dessen Werte als Hash- und Bereichsschlüssel für den Index und als Attribut übergeben werden) übergeben, da der Index der Hash-Schlüssel des globalen Sekundärindex ist).
Gibt es etwas, was ich vermisst habe oder ist das nicht möglich?
Ich war in der Lage, um dieses Problem, Zeitbereich explizit zu umgehen. Ich frage mich, wie wir das Problem lösen könnten, wenn der Sortierschlüssel des Sekundärindex nicht numerisch ist. Es sollte jetzt eine Lösung für dieses Problem von Amazon geben. – Sindhu