フィルタとクエリパターン

すべてのテーブルタブは フィルタ を持ちます。これは DynoTable が DynamoDB リクエストに変換する述語の状態です。各要素が queryscan の どちらにマッピングされるかを理解することが、アプリを高速に保ち、請求額を 小さく抑えるための大半を占めます。

このページでは ビジュアル タブモードを扱います。SQL スタイルのクエリを 直接書くには PartiQL に切り替えてください。結合や集計には Workbench を開きます。

フィルタ行

ビジュアルモードでは、ピルが横一列に並んだ1つの行が表示されます:

[Index] [hashKey = value] [rangeKey op value] [+ filter] | [Clear] [Query/Scan]
  • インデックスピル — 経由して読み取るクエリパターン
  • キーピル — そのパターンのパーティション(ハッシュ)キーと、存在する場合は ソート(レンジ)キー。
  • フィルタピル — キー以外の追加条件(スキャンフィルタ)。
  • アクションボタンは、設定した内容に応じて Query または Scan と表示され、 結果のストリーミングが始まると Load more に変わります。

値を設定すると DynoTable は自動的に実行します。ピルをクリアまたは編集すると、 フィルタが再び有効になり次第、再実行されます。

ビジュアルなフィルタ行: インデックスピッカー、キーのピル、追加されたスキャンフィルタ、そして実行ボタン。
ビジュアルなフィルタ行: インデックスピッカー、キーのピル、追加されたスキャンフィルタ、そして実行ボタン。

クエリパターン

クエリパターン とは、経由して読み取るインデックスのことです:

  • PRIMARY — テーブル自身の /
  • 名前付きの または — それ自身のキースキーマ。

選択したパターンによって、どのキーでフィルタできるかが決まります。インデックスピル からパターンを切り替えると、キーピルがそのパターンのパーティションキーとソートキーに 更新されます。

Query と Scan

これがコストと速度を左右する重要な違いです:

  • フィルタ を設定すると、DynoTable は ターゲットを絞った を発行します — 一致するパーティションだけを 読み取ります。安価で高速です。
  • 設定しない場合は にフォールバックし、テーブル(またはインデックス) 全体をページ単位で読み取ります。これを明示するため、アクションボタンは Scan と表示されます。

キーフィルタ

パーティションキーピルは値を受け取ります。値を設定した瞬間に、アクションは Query になります。ソートキーピルはその上に比較を追加します:

  • =<<=>>= — 順序つきの比較(数値、および文字列に対する辞書順)。
  • begins_with — 文字列またはバイナリに対する前方一致。
  • between — 両端を含む範囲。ピルに2つ目の値フィールドが追加されます。

文字列型のキーは 自動補完 を提供します。DynoTable がバックグラウンドで テーブルをインデックスするにつれ、すでに見つかった実際の値を提案します。 有用な候補がないキー(ランダムな UUID など)は、通常の入力欄にフォールバックします。

スキャンフィルタ

+ filter ピルは、キー以外の条件 — キーだけでなく任意の属性 — を追加します。 各フィルタは、列、演算子、値で構成されます:

  • 比較: =<<=>>=between
  • 所属: in — リスト内のいずれかの値に一致(文字列または数値)。
  • 文字列 / バイナリ: begins_withcontains
  • 存在: existsnot exists
  • 型: type equals / type not equals(DynamoDB の型コード SNBOOL、… に対して)と、コレクション型向けの size ファミリー。

提供される演算子は属性の型に応じて変わります — 数値には順序つきの比較、文字列には begins_with が表示されます。スキャンフィルタは、Query または Scan がアイテムを 読み取った に適用されるため、結果を絞り込みますが Scan が安くなるわけでは ありません。読み取りを減らすにはキーフィルタを使い、返ってくるものを絞り込むには スキャンフィルタを使います。

シングルテーブル設計: 複合キー

シングルテーブル設計は、複数のエンティティ型をキープレフィックスの背後で1つの テーブルに詰め込みます — USER#123ORDER#456TENANT#acme。DynoTable は これらを自動的に認識し、設定は不要です:

  • キーがその場でデコードされます。 複合値 — 大文字のプレフィックスが #|、 または ~ で残りの部分と結合されたもの — は、すべてのグリッド(テーブル、PartiQL の結果、Workbench)でラベル付きの各部分として表示されます。これらの文字の1つを 単に含むだけの通常の値(#FF5733 のような16進数の色や、パイプ区切りのリスト)は、 そのまま変更されずに残ります。
  • ワンクリックでエンティティに絞り込みます。 行を右クリックして Filter to USER# を選びます — プレフィックスはその行のキーから直接読み取られます。 DynoTable は通常のフィルタピルとして、キーに対する実際の begins_with を適用し、 これは通常の方法(その 、または Clear)でクリアできます。行の パーティションキー ソートキーの両方にプレフィックスがある場合は、 それぞれに1つずつ選択肢が表示されます。

ダイアログも、設定も、保存されるものもありません — 目の前にあるキーから ライブで導出されます。

オーバーロードされたテーブル上での右クリック行メニュー — ラベル付きセグメントにデコードされたキーの上に並ぶ USER# で絞り込む と POST# で絞り込む のファセット。
オーバーロードされたテーブル上での右クリック行メニュー — ラベル付きセグメントにデコードされたキーの上に並ぶ USER# で絞り込むPOST# で絞り込む のファセット。

ソートとページング

ソートキーピルは ソート順 の切り替え(昇順 / 降順)を持ち、これは DynamoDB の ScanIndexForward にマッピングされます。結果は一度に1ページずつストリーミングされます — Load more が次のページを取得し、ページサイズを変更すると 最初のページから再読み込みします。

Run to end

デフォルトでは、Query や Scan は 数ページで一時停止 し、大きなテーブルが 一度にすべて読み込まれないようにします — アクションボタンは Load more を表示して 次のページを取得します。一度の処理で すべて を取得したい場合は、実行モードを 切り替えます:

  • アクションボタンの隣の シェブロン をクリックして Run to end を選びます。 プライマリボタンは Scan all / Query all / Run all に表示が変わります — ページ予算で一時停止しているときも含め、それをクリックすると最後まで読み取ります。
  • その表示の変わったボタンをクリックすると、DynoTable はテーブル(またはインデックス) 全体が読み取られるまでページの取得を続けます。この選択はセッション中、タブごと に 記憶されます。Paged を選ぶと元に戻ります。モードを選んでも、それ自体が 実行を開始することはありません — ボタンの表示を変えるだけなので、いつ発火させるかは あなたが決めます。

大きなテーブル では、Run to end を準備すると、まずテーブルのおおよそのサイズと アイテム数を示す 確認プロンプト が表示されます。これにより、フルスキャンは事故では なく、常に意図的な選択になります。続行するには確認し、ページモードのままにするには キャンセルします。

実行モードのスプリットボタン — Paged と Run to end を示すシェブロンメニューと、その隣の Load more ボタン。
実行モードのスプリットボタン — Paged と Run to end を示すシェブロンメニューと、その隣の Load more ボタン。

キーボードから:

  • ⌘↩ は現在のクエリを実行します — 結果がページ予算で一時停止しているときは、 最初からやり直すのではなく 次のページに進みます
  • ⌘⇧↩ は常に一度の処理で 最後まで実行 します。
  • ⌘. または Esc は、実行中の処理をいつでも 停止 します。

更新日