SQL Workbench

Workbench 是一个 SQL 编写标签页,可跨你的 DynamoDB 表运行真正的 JOINGROUP BY 和聚合查询 —— 也就是 PartiQL 做不到的那些事。它是 DynamoDB 访问模式规则之内的 SQL:你编写单条 SELECT,一个编译器会检查每个联接都通过真实的键或索引读取,物化被联接的行,然后在其之上运行你完整的 SQL。

从侧边栏的右键菜单(New Workbench)、⌘⌥B 快捷键或 File → New Workbench 打开一个。编写 SQL,然后按 ⌘↩ 运行。

SELECT c.email, COUNT(*) AS orders, SUM(o.total) AS revenue
FROM orders o
JOIN customers c ON o.customerId = c.id
GROUP BY c.email
ORDER BY revenue DESC
Workbench:一条多表 SQL JOIN 查询,下方是联接后的结果网格。
Workbench:一条多表 SQL JOIN 查询,下方是联接后的结果网格。

它支持什么

一条单一的 SELECT 语句,可包含:

  • JOIN ... ON ... —— 跨表的 INNERLEFT 联接。
  • 聚合 —— COUNTSUMAVGMINMAX,外加 GROUP BYHAVING
  • WHEREDISTINCTCASECASTORDER BY

当一条聚合查询仍在流式返回时,一个 partial 徽章会标记受影响的列 —— 随着更多页的到达,这些数字会逐步精确。

访问模式规则

DynamoDB 没有服务端联接。Workbench 编译器会强制执行 DynamoDB 能够做的事:每个 JOIN 的目标侧属性都必须是目标表上的分区键或 GSI 分区键,因此每一次查找都是一次真实的查询,绝不会变成每行一次隐藏的全表 scan。

如果一个联接指向了非键属性,编辑器会给它加下划线并解释原因。编译器会预先拒绝的其他结构,并附带精确的波浪线:

  • RIGHT / FULL OUTER / CROSS 联接和逗号联接(只支持 INNER / LEFT)。
  • 子查询、CTE(WITH)、UNION / INTERSECT / EXCEPT
  • 窗口函数(OVER)、多条语句,以及任何不是 SELECT 的内容。

只读

Workbench 始终是只读的。没有编辑、暂存或批量删除 —— 它是一个分析界面。运行一条查询绝不会写入你的表。

标识符遵循标准的 SQL 大小写规则:不加引号的名称按不区分大小写匹配(WHERE PLATFORM 会找到 platform);用引号或反引号包裹名称即可进行精确大小写匹配。

运行、模板和历史

  • 运行 —— 在编辑器中按 ⌘↩、点击 Run 按钮,或按 ⌘R 重新执行。Workbench 标签页打开时绝不会自动运行;执行始终是有意为之的。
  • 运行到底 —— ⌘⇧↩,或从 Run 按钮的拆分菜单中选取它,即可流式取出完整的联接结果而非一页。页上限会解除,页会持续到达直到查询耗尽;停止是唯一的刹车。对你想一次性取全的大型聚合很方便。
  • 模板与已保存查询 —— Queries 菜单收纳了起步模板(select-all、按键筛选、按组计数,带可用 Tab 移动的空位),外加你用 Save 留存的任意查询 —— 你自己命名的查询,可在任意表上复用。选取其一会替换编辑器中的内容,因此它会完全按你保存时的样子运行。
  • 历史 —— 每一次运行都会被保存(与 PartiQL 的历史相互独立)、可搜索且可恢复 —— 包括失败的运行,因此你可以修复并重试。

一个 Workbench 标签页是一份已保存的规范 —— 给它命名、从 ⌘K 重新打开它,它能在重新加载后继续存在。你也可以导出它联接后的结果。

Workbench 与 Smart Table

两者运行同一个联接引擎;它们是编写同一件事的两种方式:

  • WorkbenchSQL 通道 —— 输入一条查询,获得聚合和解析后的属性。
  • **Smart Table 是可视化通道** —— 在画布上绘制联接,并像浏览普通表那样浏览联接后的行。

更新于