Skip to content

SQL 的瓶颈与谷歌的创新改进:管道语法的未来

Posted on:2024年9月11日 at 07:13

作为数据库领域的标准语言,SQL自1970年代以来已经成为了管理和查询结构化数据的核心工具。然而,尽管SQL已经在过去50年中获得了广泛的成功,其语法设计上的固有问题依然制约了其易用性和扩展性。谷歌的技术团队在其2024年的论文《SQL Has Problems. We Can Fix Them: Pipe Syntax In SQL》中提出了一种全新的改进方法,旨在通过引入管道语法来优化SQL的使用体验。

SQL的历史与挑战

SQL(Structured Query Language)自1970年代首次提出以来,一直是处理结构化数据的主要语言。几乎所有主流的数据库系统都采用了SQL作为其主要查询语言。然而,尽管SQL在功能上非常强大,其语法设计却长期受到用户的诟病。

  1. 学习难度大:SQL的语法复杂,对于初学者来说不易上手,而即使是专家级用户,也常常面临SQL代码可读性差、难以编写和修改的问题。
  2. 固定的操作顺序:SQL的标准操作顺序(如SELECT… FROM… WHERE…等)是固定的,这与数据的实际流动顺序不符,导致用户需要编写大量的嵌套查询来实现复杂的逻辑。
  3. 扩展性差:由于SQL的固有设计,向其添加新功能往往需要复杂的语法调整,甚至需要用户学习全新的语言。

许多替代SQL的语言被提出,但由于SQL已经在数据处理领域建立了广泛的生态系统和用户基础,新的语言很难替代SQL。因此,许多组织和开发者依然依赖SQL,尽管它存在这些明显的局限性。

谷歌的管道语法:一种更灵活的SQL扩展

为了解决SQL的上述问题,谷歌的团队提出了一种全新的方法:在不抛弃SQL的基础上,通过引入管道语法(Pipe Syntax)来扩展SQL的功能。

什么是管道语法?

管道语法是一种数据流范式,它允许用户以更直观、灵活的方式来构建SQL查询。在标准SQL中,操作必须按照固定的顺序编写,而管道语法允许用户按照实际的数据流顺序编写查询操作。

例如,传统SQL需要使用嵌套查询来进行多级聚合操作,而使用管道语法,用户可以通过顺序的操作轻松实现同样的逻辑,代码更加直观:

FROM customer
|> LEFT OUTER JOIN orders ON c_custkey = o_custkey
    AND o_comment NOT LIKE '%unusual%packages%'
|> AGGREGATE COUNT(o_orderkey) AS c_count
GROUP BY c_custkey
|> AGGREGATE COUNT(*) AS custdist
GROUP BY c_count
|> ORDER BY custdist DESC, c_count DESC;

这种结构使得SQL更具可读性,同时避免了冗长的嵌套查询。

管道语法的优势

  1. 灵活性增强:管道语法允许用户以任何顺序组合操作,极大地提高了SQL的灵活性。用户可以轻松地对数据进行筛选、聚合、排序,而不必受到固定语法顺序的限制。

  2. 易学易用:相比标准SQL的复杂嵌套查询,管道语法让SQL的编写更像是一步步的操作链,初学者可以更直观地理解查询的执行流程,而熟练用户则可以更快速地进行复杂数据操作。

  3. 向后兼容:谷歌的管道语法设计是向后兼容的。这意味着现有的SQL代码库无需大规模迁移就可以开始使用新的语法特性。用户可以逐步采用管道语法,而无需一次性学习全新的查询语言。

使用管道语法的前后对比

谷歌SQL的实现

谷歌的管道语法已经被应用于GoogleSQL,GoogleSQL是谷歌内部多个SQL系统(如F1、BigQuery、Spanner等)共用的SQL方言。通过在GoogleSQL中引入管道语法,谷歌不仅简化了复杂查询的编写,同时保留了SQL的所有强大功能。

更重要的是,管道语法的实现并未破坏SQL的现有生态。用户可以选择在现有的SQL代码中逐步加入管道语法,从而享受到其带来的简化与提升。这种渐进式的改进方法避免了大规模的代码重写,降低了采用新语法的风险。

未来的潜力与展望

谷歌的管道语法不仅是对SQL现有语法问题的修补,它为未来SQL语言的扩展和创新提供了一个平台。通过管道语法,开发者可以更容易地引入新的操作符和功能,而无需担心复杂的语法兼容性问题。

例如,谷歌的团队已经在管道语法的基础上实验性地引入了一些新的操作符,如用于调试的LOGASSERT操作符,这些操作符在标准SQL中是难以实现的。随着更多的创新加入,管道语法有潜力成为SQL未来发展的重要方向。

结论

SQL作为数据库查询语言已经走过了50年的历程,虽然它的语法设计饱受批评,但凭借其强大的功能和庞大的用户基础,SQL依然是数据处理领域的核心语言。谷歌通过引入管道语法,为SQL注入了新的活力,使其在保持现有优势的基础上,变得更加灵活、易用和可扩展。

随着越来越多的用户开始采用管道语法,SQL的未来可能会变得更加高效、直观。谷歌的这项改进不仅让开发者们得以继续使用熟悉的SQL工具,还为他们提供了一种更加现代化的查询方式。