[database] DynamoDB에서 항목 수를 가져 오는 방법은 무엇입니까?

DynamoDB 쿼리로 항목 수를 알고 싶습니다.

DynamoDB를 쿼리 할 수 ​​있지만 ‘총 항목 수’만 알고 싶습니다.

예를 들어, MySQL의 ‘SELECT COUNT (*) FROM … WHERE …’

$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가 너무 큽니다. 그리고 그것은 쿼리 크기의 한계를 초과합니다.

도움이 필요합니다.



답변

Select매개 변수를 사용COUNT 하고 요청에 사용할 수 있습니다 . “일치하는 항목 자체가 아니라 일치하는 항목의 수를 반환합니다”. 중요 , 자라 같은 코멘트에 Saumitra R. Bhave에 의해 , 쿼리 결과 집합의 크기가 1 MB보다 큰이가 “다음 ScannedCount 및 개수는 전체 항목의 부분적인 수를 나타냅니다. 여러를 수행해야합니다 모든 결과를 검색하기위한 쿼리 작업 “ .

저는 PHP에 익숙하지 않지만 여기에 Java와 함께 사용할 수있는 방법이 있습니다. 그런 다음 Count(내가 PHP의 함수라고 추측하는) 사용 하는 대신 응답'Items'Count값을 사용할 수 있습니다 – $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();

WHERE절 을 에뮬레이션 할 필요가없는 경우 DescribeTable요청을 사용하고 결과 항목 수를 사용하여 추정치를 얻을 수 있습니다.

지정된 테이블의 항목 수입니다. DynamoDB는이 값을 약 6 시간마다 업데이트합니다. 최근 변경 사항은이 값에 반영되지 않을 수 있습니다.

또한 Saumitra R. Bhave 가이 답변에 대한 의견에 언급 한 문서 의 중요한 참고 사항 :

크기의 경우 Query결과 세트는 1 MB보다 큰이며, ScannedCount그리고 Count전체 항목 중 일부만 카운트를 나타낸다. Query모든 결과를 검색하려면 여러 작업 을 수행해야합니다 ( 테이블 쿼리 결과 페이지 매기기 참조 ).


답변

으로 AWS DynamoDB의 CLI 당신은을 통해 그것을 얻을 수 스캔 은 다음과 같습니다 :

aws dynamodb scan --table-name <TABLE_NAME> --select "COUNT"

응답은 다음과 유사합니다.

{
    "Count": 123,
    "ScannedCount": 123,
    "ConsumedCapacity": null
}

이 정보는 describe-table api 와는 달리 실시간입니다.


답변

UI에서도 볼 수 있습니다. 테이블의 개요 탭으로 이동하면 항목 수를 볼 수 있습니다. 누군가에게 도움이되기를 바랍니다.


답변

테이블 이름을 바꾸고 아래 쿼리를 사용하여 로컬 환경에서 데이터를 가져옵니다.

aws dynamodb scan --table-name <TABLE_NAME> --select "COUNT" --endpoint-url http://localhost:8000

테이블 이름을 바꾸고 엔드 포인트 URL을 제거하여 프로덕션 환경에서 데이터를 가져옵니다.

aws dynamodb scan --table-name <TABLE_NAME> --select "COUNT"


답변

여기에 도달하고 C #으로 작업하는 경우 코드는 다음과 같습니다.

var cancellationToken = new CancellationToken();

var request = new ScanRequest("TableName") {Select = Select.COUNT};

var result = context.Client.ScanAsync(request, cancellationToken).Result;

totalCount = result.Count;


답변

PHP의 Java와 유사하게 ‘COUNT’값으로 PARAMETER를 선택하십시오.

$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 [ ‘개수’];

로하지만 Saumitra는 위에서 언급 한 것이 마지막 업데이트 카운트 값을 얻을 널 (null)을 반환 때까지 그 경우 사용 LastEvaluatedKey에 1 MB보다 결과 집합의 largers에주의.


답변

dynamodb 매퍼 쿼리를 사용할 수 있습니다.

PaginatedQueryList<YourModel> list = DymamoDBMapper.query(YourModel.class, queryExpression);
int count = list.size();

그것은 부른다 loadAllResults()allResultsLoaded 때까지 사용 가능한 다음 결과를 지연로드하는 합니다.

참조 : https://docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/DynamoDBMapper.Methods.html#DynamoDBMapper.Methods.query