PartiQL
PartiQL 是 DynamoDB 兼容 SQL 的查询语言。把任意表标签页切换到 PartiQL 模式(⌘⇧M),即可直接编写 SELECT、INSERT、UPDATE 和 DELETE 语句,而不必点击筛选标签。
把一个标签页切换到 PartiQL 模式会自动运行默认的 SELECT * FROM "table" scan —— 这等同于在可视化视图中打开该表。一旦你编辑了语句,是否运行就由你决定:按 ⌘↩ 执行。结果会流式返回,加载更多会获取后续的页。
SELECT * FROM "my-table" WHERE pk = 'USER#42' AND begins_with(sk, 'ORDER#')
PartiQL 不是 SQL
DynamoDB 的 PartiQL 是一个刻意设计的子集。编辑器会随你输入而对查询做静态检查,并标记出 DynamoDB 不会运行的结构 —— 通常附带一键快速修复。常见的坑:
IN使用方括号,而非圆括号 ——WHERE id IN ['a', 'b'],而不是('a', 'b')。快速修复会重写它。当列表长度超出 DynamoDB 的上限(分区键列上 50 个值,非键列上 100 个值)时,静态检查器也会在服务器拒绝之前发出警告。- 没有
LIMIT子句 —— 页大小是一个标签页控件,而非 SQL。请使用加载更多。 - 没有
JOIN、GROUP BY、HAVING、聚合、子查询、UNION或 CTE。 对于这些,请打开一个 Workbench 标签页 —— 静态检查器会把你指向那里。 LIKE→ 函数 ——LIKE '%foo%'会变成contains(col, 'foo'),'foo%'会变成begins_with(col, 'foo')。提供快速修复。IS NULL/IS NOT NULL→attribute_not_exists(col)/attribute_exists(col)。提供快速修复(注意这是反向映射)。- 字符串字面量用单引号 ——
'value',而非"value"。双引号表示一个标识符。
Run 按钮旁的格式帮助弹出层会在你需要提醒时内联列出这些内容。
模板与已保存查询
Queries 菜单会把现成的语句投放到编辑器中,并针对当前表的真实键和一个采样值进行解析 —— 因此一个 SELECT 模板到达时已经引用了你的分区键,而不是一个占位符。用 Tab 在被高亮的空位之间移动以填写其余部分。
用 Save 按钮留存一条你会复用的语句 —— 你保存的查询与模板一同存放在同一个菜单中,随时可在任意表上运行。Workbench 和 PartiQL 各自维护独立的库,因为它们使用不同的查询语言。
写入模板
INSERT / UPDATE / DELETE 模板有意使用合成的 DEMO-* 键,因此直接运行其中之一不会意外改动一条真实的行。它们被设计为按顺序运行 —— 插入,然后更新,再删除同一个 demo 条目 —— 你再编辑这些键以指向真实数据。
历史
每一条执行过的查询都会保存到按模式区分的历史中(与 Workbench 的历史相互独立)。重新打开历史菜单即可把先前的语句恢复到编辑器中 —— 包括失败的运行,因此你可以修复并重试。


