Google提出SQL管道语法以解决其局限性
在最近一篇题为“SQL存在问题,我们可以修复它们”的论文中,Google的研究团队提出在SQL中引入新的管道语法(Pipe Syntax)。该方案旨在解决SQL的设计挑战,使其成为一种更灵活的语言。目前,这一方案已在GoogleSQL和ZetaSQL方言中实现,但社区对其反馈褒贬不一。
管道语法的设计与优势
Google的研究团队提出通过引入管道数据流语法来扩展SQL。这一设计借鉴了其他现代数据语言(如MongoDB查询语言)的模式。Google软件工程师Jeff Shute及其同事表示:
我们不必忍受SQL的缺陷。这门语言是可以修复的!这篇论文展示了如何通过借鉴其他语言和API,以适度的努力将管道结构的数据流添加到SQL中。最终的语言仍然是SQL,但它是一个更好的SQL。它更灵活、更可扩展,也更易于使用。
传统SQL将多个操作组合在一个语句中,而管道SQL则将其分解为一系列步骤。例如,查询:
SELECT name, price FROM products WHERE price > 10;现在可以写成:
products | WHERE price > 10 | SELECT name, price;管道语法的潜在好处
作者及其他专家认为,采用管道语法可以带来多种实际好处,包括:
- 提高代码可读性和可维护性:通过将查询分解为多个步骤,代码更易于理解和修改。
- 更好的工具和IDE支持:新的语法设计简化了SQL查询的编写、阅读和维护,可能加速开发周期。
- 增强生产力:更直观的查询结构使开发人员能够更快地编写和调试SQL。
管道语法的应用与支持
目前,管道语法已在GoogleSQL中实现,GoogleSQL是Google多个SQL产品(包括BigQuery、Spanner、F1、Bigtable、Dremel和Procella)中使用的SQL方言。Shute及其同事总结道:
管道语法为SQL开辟了全新的工作方式,为改进SQL工具和未来语言创新提供了机会……替换SQL既没有必要,也不可取或不实际。我们可以从语言内部解决SQL最严重的挑战。
其他公司的类似尝试
Google并非唯一采用管道语法的超大规模云服务提供商。微软在Azure Data Explorer和Fabric KQL DB中也提出了类似的方法,使用了Kusto查询语言(KQL)。
社区反馈与争议
尽管管道语法有其支持者,但也有许多专家对其提出批评。SQLite的创建者Richard Hipp表示“并不特别印象深刻”,而YugabyteDB的开发者倡导者Franck Pachot则认为这是一个“不太好的主意”。Pachot指出:
这种管道语法对编写干净的SQL代码非常不利……所有语言中,函数都应以签名、名称、输入参数和返回类型开始,SQL查询也是如此。SELECT子句定义了返回给程序的内容:表格结果的列及其名称……你能从管道语法中猜出结果的结构吗?
在Reddit的一个热门讨论中,用户Jabes评论道:
这看起来非常有趣。假设优化器仍然能够将整个语句视为一个整体,我愿意尝试一下,如果我的数据库支持它的话。我想知道是否可能有一个翻译层。
开源的ZetaSQL
新的管道语法也在ZetaSQL中提供,这是GoogleSQL的开源版本。
总结
Google提出的管道语法旨在通过分解查询步骤来提高SQL的灵活性和可读性。尽管这一方案在GoogleSQL和ZetaSQL中已实现,并在某些方面表现出潜力,但其在社区中的接受度仍有争议。支持者认为它能简化SQL查询的编写和维护,而批评者则担心其可能破坏SQL的清晰性和结构。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。