Puede utilizar el Select
parámetro y utilizarloCOUNT
en la solicitud. "Devuelve el número de elementos coincidentes, en lugar de los elementos coincidentes en sí". Importante , como lo mencionó Saumitra R. Bhave en un comentario , "Si el tamaño del conjunto de resultados de la consulta es superior a 1 MB, ScannedCount y Count representarán solo un recuento parcial del total de elementos. Deberá realizar varios Operaciones de consulta para recuperar todos los resultados " .
No estoy familiarizado con PHP, pero así es como se puede usar con Java. Y luego, en lugar de usar Count
(que supongo que es una función en PHP) en el 'Items'
, puede usar el Count
valor de la respuesta - $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();
Si no necesita emular la WHERE
cláusula, puede utilizar una DescribeTable
solicitud y utilizar el recuento de elementos resultante para obtener una estimación.
El número de elementos de la tabla especificada. DynamoDB actualiza este valor aproximadamente cada seis horas. Es posible que los cambios recientes no se reflejen en este valor.
Además, una nota importante de la documentación como señaló Saumitra R. Bhave en los comentarios sobre esta respuesta:
Si el tamaño del Query
conjunto de resultados es superior a 1 MB ScannedCount
y Count
representa solo un recuento parcial del total de elementos. Debe realizar varias Query
operaciones para recuperar todos los resultados (consulte Paginación de resultados de consultas de tabla ).
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(); }
Con aws dynamodb cli puede obtenerlo mediante escaneo de la siguiente manera:
La respuesta se verá similar a esto:
observe que esta información está en tiempo real en contraste con la API describe-table
fuente
También se puede ver desde la interfaz de usuario. Vaya a la pestaña de descripción general en la tabla, verá el recuento de artículos. Espero que ayude a alguien.
fuente
Reemplace el nombre de la tabla y use la siguiente consulta para obtener los datos en su entorno local:
Reemplace el nombre de la tabla y elimine la URL del punto final para obtener los datos en el entorno de producción
fuente
Si llega aquí y está trabajando con C #, aquí está el código:
fuente
Similar a Java en PHP solo establezca Seleccione PARÁMETRO con valor 'COUNT'
$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' ));
y acceda así:
echo $ resultado ['Recuento'];
pero como Saumitra mencionó anteriormente, tenga cuidado con los conjuntos de resultados de más de 1 MB, en ese caso use LastEvaluateKey hasta que devuelva nulo para obtener el último valor de recuento actualizado.
fuente
Puede utilizar la consulta del asignador dynamodb.
llama
loadAllResults()
que cargaría perezosamente el próximo resultado disponible hasta allResultsLoaded.Ref: https://docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/DynamoDBMapper.Methods.html#DynamoDBMapper.Methods.query
fuente
le dará el recuento de las filas filtradas
dónde,
fuente
Estoy publicando esta respuesta para cualquiera que use C # y quiera una respuesta completamente funcional y bien probada que demuestre el uso de consultas en lugar de escanear. En particular, esta respuesta maneja más de 1 MB de tamaño de elementos para contar.
fuente
En Scala:
fuente
Usé escanear para obtener el recuento total de tableName requerido. A continuación, se muestra un fragmento de código Java para el mismo
fuente
Esta es la solución para los usuarios de AWS JavaScript SDK, es casi la misma para otros idiomas.
Result.data.Count le dará lo que está buscando
fuente