速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

谷歌建议在 SQL 中增加管道语法

作者:Renato Losio

  • 2024-10-25
    北京
  • 本文字数:1293 字

    阅读完需:约 4 分钟

谷歌建议在 SQL 中增加管道语法

在最近一篇题为“SQL 有问题,我们可以解决”(SQL Has Problems. We Can Fix Them)的论文中,谷歌的一个研究团队建议在 SQL 中引入新的管道语法。谷歌为解决 SQL 被认为存在的局限性而提出的这一解决方案目前已在 GoogleSQL 和 ZetaSQL 方言中提供,但社区对此的反馈却褒贬不一。


为了解决 SQL 的设计挑战并使其成为一种更灵活的语言,谷歌的研究团队提出通过引入管道数据流语法来扩展 SQL。这种设计遵循了与 MongoDB 查询语言 等新兴数据语言相似的模式。谷歌的软件工程师 Jeff Shute 及其同事写道:


我们不必容忍 SQL 的缺陷。这种语言是可以修复的!本文展示了如何借鉴其他语言和 API 的灵感,将管道结构化数据流添加到 SQL 中,而且只需可接受的开销。由此产生的语言依然是 SQL,但却是更好的 SQL。它更灵活、更可扩展,也更易于使用。


传统 SQL 将操作组合成一个语句,而管道式 SQL 则将其拆分为一系列步骤。例如,以下查询:


SELECT name, price FROM products WHERE price > 10;
复制代码


现在可以写成:


products | WHERE price > 10 | SELECT name, price;
复制代码


作者和其他专家认为,采用 SQL 的管道语法可以带来多种实际好处,包括提高代码的可读性和可维护性、更好的工具和 IDE 支持,以及提高工作效率。由于新语法旨在简化 SQL 查询的编写、读取和维护过程,因此可以加快开发周期,使查询结构更直观,更容易理解和修改。


来源:谷歌研究


目前,GoogleSQL 支持管道语法,这是一种 SQL 方言,用于 Google 的多个不同的 SQL 产品,包括 BigQuery、Spanner、F1、Bigtable、Dremel 和 Procella,既用于公开产品,也用于内部产品。Shute 及其同事总结道:


管道语法开启了全新的 SQL 使用方式、提升 SQL 工具的机会以及未来的语言创新(……)。取代 SQL 既不必要,也不理想,更不现实。我们可以从语言内部解决 SQL 最严重的问题。


谷歌并不是唯一一家采用管道式 SQL 的超大规模云服务提供商;微软也在 Azure Data Explorer 和使用 Kusto Query Language (KQL) 的 Fabric KQL DB 中提出了类似的做法。SQLite 的创建者 Richard Hipp 对此 并不十分认可,YugabyteDB 的数据库专家兼开发者倡导者 Franck Pachot 则认为这并 不是什么好主意。Pachot 写道:


这种管道语法在编写简洁 SQL 代码方面非常糟糕(……)。在所有语言中,以函数的签名、名称、输入参数和返回类型作为开头是有充分理由的(……),SQL 查询也是如此。SELECT 子句定义了返回给程序的内容:表格结果的列及其名称(……)。你能用管道语法查看上面的查询吗?你该如何猜测结果的结构?


在 Reddit 上的一个热门话题中,用户 Jabes 评论道:


我认为这看起来非常有趣。如果我的数据库能够支持它,并且假设优化器仍能将语句作为一个整体来考虑,我愿意试一试。我在想,是否有可能实现一个翻译层。


新语法也可用于 GoogleSQL 的开源版本 ZetaSQL。

作者简介


Renato Losio,拥有丰富的云架构师、技术负责人和云服务专家经验。他目前居住在柏林和的里雅斯特之间,远程担任首席云架构师。他的主要兴趣领域包括云服务和关系数据库。他是 InfoQ 的编辑,也是公认的 AWS 数据英雄。


原文链接:

https://www.infoq.com/news/2024/09/google-sql-pipe-syntax/

2024-10-25 08:0411571

评论

发布
暂无评论
发现更多内容

大作业一:

未来已来

第十一周 安全稳定知识课后作业

简简单单

一看就懂的var、let、const三者区别

蛙人

JavaScript

使用Travis CI为工程搭建一个持续集成服务。

梁龙先森

大前端 持续集成 2月春节不断更

第十一周 学习总结

简简单单

Python进阶丨如何创建你的第一个Python元类?

华为云开发者联盟

Python 编程 python元类 对象 装饰器

对接量化钱包区块链开发

v16629866266

Redis Sentinel 源码:Redis的高可用模型分析

华为云开发者联盟

数据库 redis 高可用 框架 redis sentinel

同时拿到BATJMD的Offer是怎样的一种体验?

冰河

面试 面经 offer 一起进大厂 BATJMD

数字化人才有哪些特性?

boshi

数字化转型 七日更

MyChat,一个私有的“微信“

米凤君

Java 微信 Netty IM JavaFx

图文详解:如何给女朋友解释什么是微服务?

浅羽技术

Java zookeeper 分布式 微服务 框架

记录一次BAT一线互联网公司前端JavaScript面试

我是哪吒

JavaScript 学习 面试 大前端 2月春节不断更

如何极速极速搭建个人博客?Copy攻城狮用的这一招很优秀!

华为云开发者联盟

JavaScript typescript GitHub React #Serverless

第6周作业

Geek_mewu4t

第4周左右

林亚超

研发效能,productivity 还是 performance

李小腾

华为 Python网络自动化

艺博东

Python 网络

华云大咖说 | 大型分布式监控系统建设经验

华云数据

ZEGO即构自建MSDN有序网络,为实时音视频传输极致顺畅!

ZEGO即构

大学寒假这样过,过完惊艳所有人,不只是你的宿友,还有千千万万个程序员同行们!!!

沉默王二

程序员

3. 无转折不编程,滚雪球学 Python

梦想橡皮擦

Python python从入门到精通 2月春节不断更 python入门

程序员防猝死指南

小白debug

程序员 职业 内存 打工人 Go 语言

嘿,同学,你要的Java内存模型(JMM)来了

Simon郎

Java 大数据 JVM

从架构设计理念到集群部署,全面认识KubeEdge

华为云开发者联盟

架构 容器 云原生 集群 kubeedge

我用 Python 分析了一波热卖年货,原来大家都在买这些东西?

JackTian

Python 数据分析 数据可视化 2月春节不断更 年货

ARTS打卡 第30周

引花眠

微服务 ARTS 打卡计划

京东App Swift 混编及组件化落地

京东科技开发者

swift 开发者

笔记本电脑电池显示4%可用(已接通电源),经过清灰又莫名奇妙的可以续航啦,很奇怪!

孙叫兽

电脑故障 电池

即拼商城模式开发

luluhulian

编程范式( Programming paradigm )简介

引花眠

编程范式

谷歌建议在 SQL 中增加管道语法_大数据_InfoQ精选文章