Как получить количество элементов из DynamoDB?
Я хочу знать количество элементов с запросом DynamoDB.
Я могу запросить DynamoDB, но я хочу знать только "общее количество элементов".
например, ' выберите COUNT (*) FROM ... ГДЕ...'в MySQL
$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)
)
)
),
));
echo Count($result['Items']);
этот код получает все данные пользователей выше моей точки.
если количество $ result равно 100,000, $result слишком велик. И это превысит пределы размера запроса.
Мне нужна помощь.
7 ответов
С aws dynamodb cli вы можете получить его через сканирование следующим образом:
aws dynamodb scan --table-name <TABLE_NAME> --select "COUNT"
ответ будет выглядеть примерно так:
{
"Count": 123,
"ScannedCount": 123,
"ConsumedCapacity": null
}
обратите внимание, что данная информация в режиме реального времени, в отличие от описания-таблицы api
также можно увидеть из пользовательского интерфейса. Перейдите на вкладку Обзор таблицы, вы увидите количество элементов. Надеюсь, это кому-то поможет.
подобно Java в PHP только установите параметр Select со значением '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'
));
и подходит к нему так :
echo $result ['Count'];
, а как Saumitra упомянутый выше будьте осторожны с resultsets largers чем 1 MB, в этом случае используйте LastEvaluatedKey, пока он не вернет null, чтобы получить последнее обновленное значение счетчика.
Если вам случится, чтобы добраться сюда, и вы работаете с C#, вот код:
var cancellationToken = new CancellationToken();
var request = new ScanRequest("TableName") {Select = Select.COUNT};
var result = context.Client.ScanAsync(request, cancellationToken).Result;
totalCount = result.Count;
я использовал scan для получения общего количества требуемого имени таблицы.Ниже приведен фрагмент кода Java для same
Long totalItemCount = 0;
do{
ScanRequest req = new ScanRequest();
req.setTableName(tableName);
if(result != null){
req.setExclusiveStartKey(result.getLastEvaluatedKey());
}
result = client.scan(req);
totalItemCount += result.getItems().size();
} while(result.getLastEvaluatedKey() != null);
System.out.println("Result size: " + totalItemCount);
Это решение для пользователей AWS JavaScript SDK, оно почти такое же для других языков.
результат.данные.Граф даст вам то, что вы ищете
apigClient.getitemPost({}, body, {})
.then(function(result){
var dataoutput = result.data.Items[0];
console.log(result.data.Count);
}).catch( function(result){
});