Databend 集成 PRQL:现代数据处理的一小步
PRQL,读作 “Prequel”,是一种与 SQL 并肩的查询语言,它的独到之处在于采用了管道式的语法,在查询关系数据库时显得更加直观和高效。
Databend 拥抱 PRQL
在 v1.2.380-nightly 版本中,得益于社区贡献者 @ncuwaln 提交的重要 PR,Databend 成功地引入了对 PRQL 语言的支持。这一新特性进一步增强了 Databend 查询的灵活性和用户友好性。
用户仅需进行简单的配置更改,即可启用 PRQL 方言:
set sql_dialect = 'prql';
集成细节
Databend 和 PRQL 都采用了 Rust 语言进行开发,这使得集成 PRQL 编译器 prqlc
成为可能。
prqlc = "0.11.3"
该 PR 以不到一百行代码实现了对 PRQL 的支持,核心是添加了一个新的 SQL 方言选项 prql
。
启用此选项后,Databend 将调用 prqlc
解析 PRQL 语句,并将其转换为 SQL 语句,随后由 Databend 的 SQL 解析器进一步处理。
let final_sql: String = match sql_dialect == Dialect::PRQL { true => { let options = prqlc::Options::default(); match prqlc::compile(sql, &options) { Ok(res) => { prql_converted = true; res } Err(e) => { warn!( "Try convert prql to sql failed, still use raw sql to parse. error: {}", e.to_string() ); sql.to_string() } } } false => sql.to_string(), }; ....
值得一提的是,prqlc
使用了 chumsky 库作为其解析器,而 Databend 则采用了 nom-rule 。尽管两者在技术实现上有所不同,但都提供了用户友好的 errror recovery 信息。
错误提示的对比展示
以下是 PRQL 解析器和 Databend 解析器的错误提示示例:
PRQL 解析器 错误提示:
from tracks select {album_id, name, unit_price} sort {-unit_price, name} grouq album_id ( aggregate { track_count = count name, album_price = sum unit_price } ) Error: ╭─[:4:1] │ 4 │ grouq album_id ( │ ──┬── │ ╰──── Unknown name `grouq` ───╯
Databend 解析器 错误提示:
🐳 :) SELECT album_id, COUNT(*) AS track_count, COALESCE(SUM(unit_price), 0) AS album_price FROM tracks GROUP BX album_id; error: APIError: ResponseError with 1005: error: --> SQL:7:7 | 1 | SELECT | ------ while parsing `SELECT ...` . 4 | COALESCE(SUM(unit_price), 0) AS album_price 5 | FROM 6 | tracks 7 | GROUP BX | ^^ unexpected `BX`, expecting `BY`
如何使用 PRQL
用户只需进行简单的配置,即可切换到 PRQL 方言,并开始享受 PRQL 直观、管道式的查询体验。以下是一个简单的查询示例:
🐳 :) set sql_dialect = 'prql'; 🐳 :) from lineitem ## run tpch q1 filter `l_shipdate` <= '1998-09-02' group {l_returnflag, l_linestatus} ( aggregate { sum_qty = sum l_quantity, sum_base_price = sum l_extendedprice, sum_disc_price = sum l_extendedprice * (1 - l_discount), sum_charge = sum l_extendedprice * (1 - l_discount) * (1 + l_tax), avg_qty = average l_quantity, avg_price = average l_extendedprice, avg_disc = average l_discount, count_order = count 0 , } );
通过这个例子,我们可以看到 PRQL 强大的功能和优雅的语法设计,它让复杂的数据查询变得简单而直观。当然,用户也可以随时根据需要切换回标准的 SQL 方言或其他支持的方言:
🐳 :) set sql_dialect = 'postgresql';
通过这次集成,Databend 拥抱了前沿的查询语言PRQL,为用户带来了更高效、愉悦的数据处理体验。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开源日报 | AI公司如何搞定训练语料;Zabbix变更开源协议;抱抱脸Open了OpenAI的秘密武器
欢迎阅读 OSCHINA 编辑部出品的开源日报,每天更新一期。 # 2024.4.8 今日要点 通义千问开源 320 亿参数模型 此次开源的 320 亿参数模型,将在性能、效率和内存占用之间实现更理想的平衡,例如,相比 14B 模型,32B 在智能体场景下能力更强;相比 72B,32B 的推理成本更低。通义千问团队希望 32B 开源模型能为下游应用提供更好的解决方案。 JavaScript 引擎 V8 的内存沙盒 (V8 Sandbox) 开始测试 在 V8 中发现和利用的几乎所有漏洞都有一个共同点:最终的内存损坏必然发生在 V8 堆内存,因为编译器和运行时(几乎)专门在 V8HeapObject实例上运行。基于此,V8 团队设计了沙盒机制。V8 沙盒的设计思想是隔离 V8 堆内存,这样任何内存损坏都不能 “传播” 到进程内存的其他部分。 Zabbix 7.0 变更开源协议,从 GPLv2 转为 AGPLv3 今日观察 社交观察 「抱抱脸Open了OpenAI的秘密武器」 OpenAI的秘密武器、ChatGPT背后功臣RLHF,被开源了。 来自Hugging Face、加拿大蒙特利尔M...
- 下一篇
高维解码|Redis 收紧许可证!开源软件公司如何在云时代生存?
最近,Redis 从开放源代码的 BSD 许可证过渡到了更加限制性的 Server Side Public License (SSPLv1)。一石激起千层浪,Redis 的这一举动,不仅分化了前 Redis 维护者,也再次引发业界对于“开源项目可持续性以及许可证决策对其社区的影响”的讨论。 这一变化将从 Redis 7.4 版本开始生效,我们预计多个 Linux 发行版将把 Redis 从它们的代码库中剔除。然而,这种干扰很可能是暂时的,因为已经有替代方案可供选择 - 比如由 Linux 基金会支持的开源替代品 Valkey。微软的 Garnet 也是一个选择,它是一个用 C# 编写的开源、速度更快的缓存存储,完全兼容 Redis 客户端。此外,像亚马逊这样的云服务提供商也可能会创建自己的 Redis 分支,就像他们在 Elastic Search 转向 SSPL 时的操作一样。 在此背景下,我想和大家聊聊对于这件事情的一些思考。 01.云端吞噬开源 开源软件虽然有着悠久的历史,但近年来开源业务模式发生了重大变革。 从传统来看,这种模式依赖于公司为使用开源软件时提供商业支持和企业级功能...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群