Posit 在 4 月 20 日发布了 ggsql 的 alpha 版:一个用 SQL 写图表的可视化工具。语法思路很直白——前半段还是普通 SQL 查数据,遇到 VISUALIZE 之后开始定义映射、图层、标注、比例尺和标签,像 ggplot2 那样组合出散点图、柱状图、直方图、箱线图。

这事的意义不在“会画图”本身。会画图的库太多了。ggsql 真正想切的是那批长期活在数据库、BI 和 notebook 之间的人:SQL 很熟,Python/R 不想碰,导出 CSV 又嫌麻烦。Posit 现在给他们递了一条路:别换脑子,直接在 SQL 里把图做完。

ggsql 到底做了什么

从原型看,ggsql 把图形语法翻译成了 SQL 式声明语言。比如 VISUALIZE bill_len AS x, bill_dep AS y FROM ggsql:penguins DRAW point,就是把数据列映射到视觉通道,再用 DRAW 加图层。要加回归线,就再写一行 DRAW smooth。要做注释,用 PLACE。要调色和标题,用 SCALELABEL

这套设计有两个直接后果。

  • 对 SQL 用户更顺手.查询和作图放在一条链里,不用跳到 Python/R。
  • 对 LLM 更友好.Posit 明说了,模型很会说 SQL,而 SQL 式声明语法也更适合生成、改写和补全。

支持环境也很现实:Quarto、Jupyter、Positron、VS Code。原文示例用的是 DuckDB 后端,这个细节很关键。DuckDB 这两年成了本地分析和 notebook 场景的事实标准之一,ggsql 先抱住它,不奇怪。

真正的看点,不是语法,而是“去运行时”

我更在意的不是 DRAW point 写得顺不顺,而是 Posit 反复强调:ggsql 不需要完整的 R 或 Python 运行时。这个判断很硬,因为它直指一个老问题——很多工具并不缺画图库,缺的是可嵌入、可分发、可沙箱化的执行环境。

说白了,企业和平台方嫌 R/Python 太重。要在 BI、AI agent、报表系统、编辑器插件里嵌入一个可视化能力,带上一整套解释器、依赖管理和安全边界,成本不低。ggsql 想卖的是更小、更可控的那层能力。"天下熙熙,皆为利来",这不是美学选择,是部署成本在逼产品选型。

这也解释了为什么 Posit 会把 Quarto 和 AI agent 场景挂在前面。过去 18 年,ggplot2 证明了“声明式作图”有多强;现在的问题变成:这套能力能不能脱离 R 本身,变成一个更轻的基础设施组件。历史上很多技术都走过这条路——先依附语言社区,后抽成平台能力。数据库如此,浏览器如此,报表引擎也如此。ggsql 现在只是刚上桌,离吃席还远。

谁会受益,谁先别急着鼓掌

最可能立刻受益的,是三类人:

  • 重度 SQL 分析师.尤其是常用 DuckDB、Parquet、Quarto 写报告的人。
  • 数据团队里的“半工程化”角色.会写查询,但不想维护 Python/R 环境。
  • 做 AI 数据助手的工具团队.需要一个可控、声明式、低执行风险的作图层。

但我不太买账的是“SQL 和图形语法天作之合”这种宣传。两者确实都偏声明式,这没错;可声明式相似,不等于使用门槛就低。SQL 用户会不会喜欢 VISUALIZE / DRAW / SCALE / PLACE 这一整套新方言,得看学习成本和调试体验。语法像 SQL,不代表心智负担就真像 SQL。

还有一个原文没展开的限制:现在它只是 alpha。示例漂亮,不等于生态已成。最该盯三件事:跨后端兼容能做多深;复杂交互图和大数据量下性能如何;以及它会不会变成只在 Posit 自家工具链里最好用的“半开放标准”。如果答案偏后者,那它更像增强版配件,不是行业通用语言。

横向看,ggsql 夹在几股旧势力中间:一边是 Tableau、Power BI 这类 GUI 工具,强在易上手,弱在可复现;一边是 Vega-Lite、Observable 这种声明式可视化路线,强在表达力和 Web 生态,弱在 SQL 用户的直接亲和力;再一边是 Python/R 老阵营,成熟,但环境重。ggsql 的机会,恰恰来自这三边都各有短板。

托克维尔说,旧制度最危险的时候,是它开始改革的时候。今天的数据工具链也差不多:大家都知道“查数的人”和“画图的人”不该被语言边界分开,但谁都还没给出一个足够顺手、足够轻、又足够通用的答案。ggsql 至少在认真答题。

它不一定会赢。可它挑中的问题,是真的问题。很多所谓数据民主化,最后只是把用户赶进更封闭的 GUI。ggsql 反着来:它想保留代码的可复现,又砍掉整门语言的包袱。这条路要是走通,火的不是一个新库,而是 SQL 可能重新长出一层“表达界面”。