PartiQL

PartiQL は DynamoDB の SQL 互換クエリ言語です。任意のテーブルタブを PartiQL モード(⌘⇧M)に切り替えると、フィルターピルをクリックする代わりに、SELECT、INSERT、UPDATE、 DELETE ステートメントを直接記述できます。

補完は現在のテーブルの範囲に留まります。エディタはそのテーブルのインデックス化されたフィールドと値、そして $table プレースホルダーを提案します。テーブルの選択候補は出しません。ローカルインデックスがどう作られるかはテーブルの概要とインデックス作成を参照してください。

タブを PartiQL モードに切り替えると、既定の SELECT * FROM "table" スキャンが自動実行されます — テーブルをビジュアルビューで開くのと直接同じ動作です。ステートメントを編集したあとは、実行するかどうかはあなた次第です: ⌘↩ を押して実行します。結果がストリーミングで表示され、さらに読み込む で次のページを取得します。書き込みステートメントの場合、同じショートカットはボタンの書き込みモードで実行します。既定は 変更を Commit で、ステージとコミットを 1 ステップで行います(書き込みテンプレートを参照)。

PartiQL は Workbench と同じクエリプランとコストのプレビューを使います。

SELECT * FROM "my-table" WHERE pk = 'USER#42' AND begins_with(sk, 'ORDER#')
DynoTable の DynamoDB PartiQL エディタ:SELECT 文、テンプレートメニュー、その下にストリーミングされる結果。
DynoTable の DynamoDB PartiQL エディタ:SELECT 文、テンプレートメニュー、その下にストリーミングされる結果。

PartiQL は SQL ではない

DynamoDB の PartiQL は意図的なサブセットです。エディタは入力中にクエリをリントし、DynamoDB が実行しない構文をフラグします。一部の診断にはワンクリックのクイックフィックスが付きます。よくある落とし穴:

  • IN は丸括弧ではなく角括弧を使う — ('a', 'b') ではなく WHERE id IN ['a', 'b']。クイックフィックスが書き換えます。リストが DynamoDB の上限(パーティションキー列では 50 値、非キー列では 100 値)を超えた場合も、サーバーが拒否する前にリンターが警告します。
  • LIMIT 句なし — ページサイズは SQL ではなくタブのコントロールです。さらに読み込む を使ってください。
  • JOIN、GROUP BY、HAVING、集計、サブクエリ、UNION、CTE はなし。結合と集計には Workbench タブを開いてください — リンターがそこへ案内します。サブクエリ、UNION、CTE は Workbench でも利用できません。
  • LIKE → 関数 — LIKE '%foo%' は contains(col, 'foo') に、'foo%' は begins_with(col, 'foo') になります。クイックフィックスが提供されます。
  • IS NULL / IS NOT NULL は警告になり、クイックフィックスはありません。 どちらも有効な PartiQL ですが、アイテムにない属性は NULL ではなく MISSING です。IS NULL はそのアイテムを除外し、IS NOT NULL はそれを含めます。属性のないアイテムには IS MISSING を、属性のあるアイテムには IS NOT MISSING を書いてください。
  • 文字列リテラルはシングルクォート — "value" ではなく 'value'。ダブルクォートは識別子を意味します。

Execute ボタンの隣のformat-helpポップオーバーは、リマインダーが必要なときにこれらをインラインで一覧します。DynamoDB の予約語とぶつかる属性名にはエイリアスが必要です — 予約語チェッカーがそれを検出し、PartiQL や SDK の呼び出しに貼り付けられる ExpressionAttributeNames のマップを生成します。

テンプレートと保存済みクエリ

Query メニューは、すぐに使えるステートメントをエディタに挿入します。アクティブなテーブルの実際のキーとサンプリングされた値に対して解決されるので、 SELECT テンプレートはプレースホルダーではなく、あなたのパーティションキーをすでに参照した状態で届きます。ハイライトされた箇所を Tab で移動しながら、残りを埋めてください。

再利用したいステートメントは 保存 ボタンで保存できます — 保存したクエリはテンプレートと同じメニューに並びます。PartiQL の保存は、それを書いたテーブルとリージョンに紐づきます。テーブル間を行き来できるのは Workbench の保存の方です。Workbench と PartiQL は別々のライブラリを保持します。異なるクエリ言語を扱うためです。

書き込みテンプレート

INSERT / UPDATE / DELETE テンプレートは、意図的に合成の DEMO-* キーを使うので、すぐに実行しても実際の行を誤って変更することはありません。順番に実行するよう設計されています — 挿入、更新、そして同じデモアイテムの削除 — キーを編集して実際のデータを対象にします。

履歴

実行したすべてのクエリは、モードごとの履歴に保存されます(Workbenchのものとは別です)。履歴メニューを再度開くと、以前のステートメントをエディタに復元できます — 失敗した実行も含まれるので、修正して再試行できます。

更新日