Sie können den Select
Parameter verwenden undCOUNT
in der Anfrage verwenden. Es "gibt die Anzahl der übereinstimmenden Elemente zurück und nicht die übereinstimmenden Elemente selbst". Wichtig , wie von Saumitra R. Bhave in einem Kommentar angesprochen : "Wenn die Größe der Abfrage-Ergebnismenge größer als 1 MB ist, stellen ScannedCount und Count nur einen Teil der Gesamtzahl der Elemente dar. Sie müssen mehrere ausführen Abfragevorgänge, um alle Ergebnisse abzurufen " .
Ich bin nicht mit PHP vertraut, aber hier ist, wie Sie es mit Java verwenden können. Und anstatt Count
(was ich vermute, ist eine Funktion in PHP) auf dem zu verwenden 'Items'
, können Sie den Count
Wert aus der Antwort verwenden - $result['Count']
:
final String week = "whatever";
final Integer myPoint = 1337;
Condition weekCondition = new Condition()
.withComparisonOperator(ComparisonOperator.EQ)
.withAttributeValueList(new AttributeValue().withS(week));
Condition myPointCondition = new Condition()
.withComparisonOperator(ComparisonOperator.GE)
.withAttributeValueList(new AttributeValue().withN(myPoint.toString()))
Map<String, Condition> keyConditions = new HashMap<>();
keyConditions.put("week", weekCondition);
keyConditions.put("point", myPointCondition);
QueryRequest request = new QueryRequest("game_table");
request.setIndexName("week-point-index");
request.setSelect(Select.COUNT);
request.setKeyConditions(keyConditions);
QueryResult result = dynamoDBClient.query(request);
Integer count = result.getCount();
Wenn Sie die WHERE
Klausel nicht emulieren müssen , können Sie eine DescribeTable
Anforderung verwenden und die resultierende Elementanzahl verwenden, um eine Schätzung zu erhalten.
Die Anzahl der Elemente in der angegebenen Tabelle. DynamoDB aktualisiert diesen Wert ungefähr alle sechs Stunden. Letzte Änderungen werden möglicherweise nicht in diesem Wert berücksichtigt.
Ein wichtiger Hinweis aus der Dokumentation, wie er von Saumitra R. Bhave in den Kommentaren zu dieser Antwort erwähnt wurde:
Wenn die Größe der Query
Ergebnismenge größer als 1 MB ist ScannedCount
und Count
nur einen Teil der Gesamtzahl der Elemente darstellt. Sie müssen mehrere Query
Vorgänge ausführen , um alle Ergebnisse abzurufen (siehe Paginieren von Tabellenabfrageergebnissen ).
AmazonDynamoDBClientBuilder.standard().withRegion(region).withCredentials(credentialsProvider).build() .query(new QueryRequest(freeKeysTableName).withSelect(Select.COUNT)).getCount()
while(result.getLastEvaluatedKey()!=null){ request.setExclusiveStartKey(result.getLastEvaluatedKey()); result = dynamoDBClient.query(request); count+= result.getCount(); }
Mit dem aws dynamodb cli können Sie es wie folgt per Scan erhalten :
Die Antwort sieht ungefähr so aus:
Beachten Sie, dass diese Informationen im Gegensatz zur API für die Beschreibungstabelle in Echtzeit vorliegen
quelle
Kann auch von der Benutzeroberfläche aus gesehen werden. Gehen Sie zur Registerkarte Übersicht in der Tabelle, Sie sehen die Anzahl der Artikel. Hoffe es hilft jemandem.
quelle
Wenn Sie zufällig hierher gelangen und mit C # arbeiten, finden Sie hier den Code:
quelle
Ersetzen Sie den Tabellennamen und verwenden Sie die folgende Abfrage, um die Daten in Ihrer lokalen Umgebung abzurufen:
Ersetzen Sie den Tabellennamen und entfernen Sie die Endpunkt-URL, um die Daten in der Produktionsumgebung abzurufen
quelle
Ähnlich wie bei Java in PHP nur Select PARAMETER mit dem Wert 'COUNT' setzen.
$result = $aws->query(array( 'TableName' => 'game_table', 'IndexName' => 'week-point-index', 'KeyConditions' => array( 'week' => array( 'ComparisonOperator' => 'EQ', 'AttributeValueList' => array( array(Type::STRING => $week) ) ), 'point' => array( 'ComparisonOperator' => 'GE', 'AttributeValueList' => array( array(Type::NUMBER => $my_point) ) ) ), 'Select' => 'COUNT' ));
und greift einfach so zu:
echo $ result ['Count'];
aber wie Saumitra oben erwähnt seien Sie vorsichtig mit Result largers als 1 MB, in diesem Fall der Verwendung LastEvaluatedKey bis es null zurückgibt die letzte aktualisierte Zählwert zu erhalten.
quelle
Sie können die Dynamodb-Mapper-Abfrage verwenden.
Es ruft auf,
loadAllResults()
dass das nächste verfügbare Ergebnis träge geladen wird, bis allResultsLoaded.Ref: https://docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/DynamoDBMapper.Methods.html#DynamoDBMapper.Methods.query
quelle
gibt Ihnen die Anzahl der gefilterten Zeilen
wo,
quelle
Ich poste diese Antwort für alle, die C # verwenden und eine voll funktionsfähige, gut getestete Antwort wünschen, die die Verwendung von Abfragen anstelle von Scans demonstriert. Diese Antwort behandelt insbesondere mehr als 1 MB Größe der zu zählenden Elemente.
quelle
In Scala:
quelle
Ich habe Scan verwendet, um die Gesamtzahl des erforderlichen Tabellennamens zu ermitteln. Das Folgende ist ein Java-Code-Snippet für denselben
quelle
Dies ist eine Lösung für AWS JavaScript SDK-Benutzer, die für andere Sprachen fast identisch ist.
Result.data.Count gibt Ihnen, wonach Sie suchen
quelle