無料ツール

DynamoDB クエリビルダー

Query / Scan リクエスト全体を組み立て — テーブル、インデックス、キー条件、フィルタ、射影、Limit、ソート順、整合性読み取り、ページネーション — 実行可能な AWS SDK v3・CLI・boto3 のプログラム、または PartiQL ステートメントとしてコピーできます。

リクエストを組み立てる
リクエストオプション
実行可能なコード
import { DynamoDBClient, QueryCommand } from "@aws-sdk/client-dynamodb";

const client = new DynamoDBClient({});

const params = {
  "TableName": "Orders",
  "KeyConditionExpression": "#hashKey = :hashKeyValue AND begins_with(#rangeKey, :rangeKeyValue)",
  "ExpressionAttributeNames": {
    "#hashKey": "pk",
    "#rangeKey": "sk"
  },
  "ExpressionAttributeValues": {
    ":hashKeyValue": {
      "S": "USER#123"
    },
    ":rangeKeyValue": {
      "S": "ORDER#"
    }
  },
  "Limit": 25
};

const items = [];
let lastEvaluatedKey;
do {
  const page = await client.send(
    new QueryCommand({ ...params, ExclusiveStartKey: lastEvaluatedKey })
  );
  items.push(...(page.Items ?? []));
  lastEvaluatedKey = page.LastEvaluatedKey;
} while (lastEvaluatedKey);

console.log(items);

アクセスパターンから実行可能なリクエストへ

式だけで仕事が終わることはめったにありません。本番の Query は、どのインデックスを読むか、リクエストごとに何件評価するか、ソートキーをどちら向きにたどるか、読み取りに強い整合性が必要か、そしてレスポンスが LastEvaluatedKey を伴って返ってきたらどうするかも決めます。これらのリクエストレベルのパラメータは式の文字列の外側にあり — コピペしたスニペットが狂うのはたいていそこです。

このビルダーはリクエストを作業の単位として扱います。式ビルダーと同じ型付きで予約語に安全なモデルの上にキー条件・フィルタ・射影を組み立て、その横でリクエストオプションを設定します。出力は断片ではなく、実行できるプログラムです — import、クライアント初期化、呼び出しそのもの、そして「全ページを取得」を有効にすれば、結果の全ページを汲み尽くす ExclusiveStartKey のループまで。

生成コードはターゲットごとに正直です。AWS CLI は自動でページネーションするため Limit は --page-size になり、単一リクエスト実行には --no-paginate が付きます。PartiQL はステートメントではなく ExecuteStatement API に属するパラメータをお断りします。降順の Query は、表現できる場面ではソートキーへの ORDER BY になります。

必要なのは式そのものだけ — 6 つの操作いずれかの条件式・フィルタ式・更新式とそのプレースホルダーマップ — ですか? DynamoDB 式ビルダーはまさにそのために作られています。 まず 2 つの読み取り操作のどちらにするか迷っていますか? Query と Scan の比較 では、それぞれが正解になる場面を解説しています。

よくある質問

DynamoDB 式ビルダーとは何が違いますか?

両者は意図的に役割を分けています。式ビルダーは式の構文が主題です — 6 つの操作すべてにわたるキー条件、フィルタ、更新式・条件式と、その ExpressionAttributeNames/Values マップ — そしてコマンド単体を出力します。クエリビルダーは完全な Query / Scan リクエストが主題です。テーブルとインデックス、キー条件、フィルタ、射影に加え、式ツールが扱わないリクエストレベルのパラメータ(Limit、ソート順、ConsistentRead、ExclusiveStartKey)まで含めて、クライアント初期化と任意のページネーションループを備えた実行可能なプログラムを出力します。

Query や Scan で Limit は実際に何を制限しますか?

Limit はリクエストごとに DynamoDB が評価するアイテム数の上限であり、返ってくる一致アイテム数ではありません。フィルタは読み取りの後に適用されるため、Limit 25 と FilterExpression を持つ Query は 25 件未満 — あるいは 0 件 — を返しつつ、評価したすべての読み取りキャパシティを消費し、ページネーションは LastEvaluatedKey から続きます。自動でページネーションする AWS CLI では、同じパラメータを --page-size で設定します。

DynamoDB のページネーション(LastEvaluatedKey)はどう動きますか?

まだデータが残っている Query / Scan のレスポンスには LastEvaluatedKey — 最後に読み取ったアイテムのプライマリキー — が含まれます。それを次のリクエストの ExclusiveStartKey として渡し、LastEvaluatedKey のないレスポンスが返るまで繰り返します。「全ページを取得」をオンにすると、生成される SDK v3 と boto3 のプログラムにまさにそのループが含まれます。AWS CLI は --no-paginate を渡さない限り自動でページをたどります。

強い整合性の読み取りはいつ使えますか?

ConsistentRead はベーステーブルとローカルセカンダリインデックスで機能しますが、グローバルセカンダリインデックスでは使えません — ConsistentRead を設定した GSI への Query は拒否されます。強い整合性の読み取りは、結果整合性の読み取りの 2 倍の読み取りキャパシティも消費します。これは PartiQL ステートメント本文ではなく API のパラメータなので、PartiQL タブは正直にお断りします。

ここに入力した内容はどこかにアップロードされますか?

いいえ。これは静的なページです。リクエストの組み立てとコード生成はすべてブラウザ内で行われるため、テーブル名・キー値・フィルタがサーバーに届くことはありません。「リンクをコピー」はリクエスト全体を URL に詰め込みます — 入力内容がページの外に出る唯一の経路はそのリンクの共有であり、それはあなたの手の中にあります。

Console なしで DynamoDB を扱う

DynoTable は DynamoDB 向けの高速なデスクトップクライアントです — テーブルを閲覧し、SQL スタイルのクエリを実行し、アイテムをローカルで編集できます。