DynamoDB でアイテム数を数えるには?

Query か Scan で Select: 'COUNT' を使うと、一致したアイテムを返さずに数えられます。1 回のレスポンスがカウントするのはスキャンした 1 MB 分までなので、総数を得るには LastEvaluatedKey でページ送りしながら Count の値を合計しなければなりません。テーブル全体のおおよその件数なら、DescribeTableItemCount を読みます。グループ化した件数や、列に対する SUM/AVG が欲しいなら、DynoTableの SQL Workbench が COUNTGROUP BY を 1 つのクエリとして実行し、ページ送りも代わりにこなします。

一致したアイテムを正確に数える

Query(1 つのパーティションキーに対して)か Scan(テーブル全体)で SelectCOUNT に設定します。レスポンスは CountScannedCount を返し、アイテムのデータは返しません。スキャンしたデータが 1 MB を超えると操作は停止して LastEvaluatedKey を返すので、それがなくなるまで呼び出しと Count の加算を続けます。数えることは読むことより安くはない点に注意してください。COUNT はアイテムを返すのと同じ読み取りキャパシティを消費します。

Count と ScannedCount

  • Count — このページで、キー条件やフィルタ条件に一致したアイテム数。
  • ScannedCount — フィルタ前に検査されたアイテム数。フィルタ式は結果を絞りますが、スキャンされた量(とそのコスト)は減らしません。

COUNT は割引ではない、実測

「数えるコストは読むコストと同じ」は主張しやすく、疑われやすい命題です。ですから、およそ 3 KB のアイテムを 40 件(合計 120,700 バイト)保持するテーブルでの結果を示します。各呼び出しには ReturnConsumedCapacity: 'TOTAL' を付けています。

リクエストCountScannedCountConsumedCapacity
Select: 'COUNT' 付きの Query404015
アイテムを返す Query404015
ScanSelect: 'COUNT'、半分に一致するフィルタ204015

見るべきは 3 行目です。フィルタは Count を半分にし、ScannedCount はそのままにし、請求はまったく動かしません。

15 は予測できる数字です。120,700 バイトは 4 キロバイトの読み取りユニット 30 個に切り上がり、Query は明示しない限り結果整合性なので半分になります。

安上がりな近似

DescribeTableItemCount を返します。これはテーブル全体の推定値で、おおむね 6 時間ごとに更新されます。無料で即座に得られますが、リアルタイムではありません。ダッシュボードには向きますが、正確な総数には向きません。

DynamoDB Local でテストする場合の注意が 1 つ。あちらは ItemCount を即座に更新します。40 件を書き込んで DescribeTable を呼ぶと、すぐに 40 が返ってきます。実サービスはそうしないので、ローカルで通る鮮度のロジックが、本番では 6 時間ずれることがあります。

DynoTable で数え、集計する

生の API は COUNT を提供しますが、GROUP BYSUMAVG もありません。グループ化と合計は通常アプリケーションのコードで行われます。DynoTableSQL Workbench はそれらを追加します。SELECT COUNT(*)SUM(total)、あるいはグループ化した件数を書けば、ページ送りのループを代わりに回し、ページが流れ込むにつれて数値を精緻化します。読み取りは依然として DynamoDB を通るので同じ読み取りキャパシティのコストがかかりますが、ループの代わりに 1 つのクエリを書けばよく、API が直接返せないグループ化・合計済みの結果が得られます。

さらに詳しく

DynamoDB での COUNT、SUM、集計を読み、式ビルダーでカウントのクエリを組み立てましょう。自分のテーブルに対してカウントや集計(COUNTSUMGROUP BY)を実行するには、DynoTable をダウンロードしてください。

参考資料

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

キャパシティの数値は 2026-07-28 に、@aws-sdk/client-dynamodb 3.1095.0 を用いて DynamoDB Local 3.3.0(amazon/dynamodb-local:latest)に対して再現しました。DynamoDB Local は実サービスではありません。上で触れた ItemCount の相違は、両者が異なる 1 点です。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。