PRQL
管道式关系查询语言(Pipelined Relational Query Language),发音为"Prequel"。
PRQL 是一种用于数据转换的现代语言 —— 一种简单、强大、管道式的 SQL 替代品。与 SQL 一样,它可读性强、明确且声明式。与 SQL 不同的是,它形成了一个逻辑转换管道,并支持变量和函数等抽象概念。由于它可以编译成 SQL,因此可以与任何使用 SQL 的数据库一起使用。
PRQL 可以像这样简单:
from tracks
filter artist == "Bob Marley" # 每一行都对前一个结果进行转换
aggregate { # `aggregate` 将每列减少为一个值
plays = sum plays,
longest = max length,
shortest = min length, # 允许使用尾随逗号
}
以下是一个更大的语言示例:
from employees
filter start_date > @2021-01-01 # 清晰的日期语法
derive { # `derive` 添加列/变量
gross_salary = salary + (tax ?? 0), # 简洁的 coalesce
gross_cost = gross_salary + benefits_cost, # 变量可以使用其他变量
}
filter gross_cost > 0
group {title, country} ( # `group` 对每个组运行一个管道
aggregate { # `aggregate` 将每个组减少为一个值
average gross_salary,
sum_gross_cost = sum gross_cost, # `=` 设置列名
}
)
filter sum_gross_cost > 100_000 # `filter` 替代了 SQL 中的 `WHERE` 和 `HAVING`
derive id = f"{title}_{country}" # 类似 Python 的 F-字符串
derive country_code = s"LEFT(country, 2)" # S-字符串允许使用 SQL 作为转义方式
sort {sum_gross_cost, -country} # `-country` 表示降序
take 1..20 # 范围表达式(这里也可以写成 `take 20`)
要了解更多关于该语言的信息、更多示例和与 SQL 的对比,请访问 [prql-lang.org][prql website]。要在浏览器中试验 PRQL,请查看 [PRQL Playground][prql playground]。
当前状态 - 2024年6月
PRQL 正在由一个不断壮大的社区积极开发。对于勇于尝试的人来说,它已经可以使用了,无论是通过我们支持的集成,还是在您自己的工具中使用我们支持的语言绑定。
PRQL 仍然存在一些错误和一些缺失的功能,可能只适合向非技术团队推广用于相对简单的查询。
特别是,我们正在开发一个新的解析器,这将让我们消除许多错误并大大简化我们的代码。它还将让我们能够在不增加编译器复杂性的情况下扩展语言。 在我们进行这项工作的同时,我们也专注于:
- 确保我们支持的功能非常稳健;解决任何优先级较高的错误。随着越来越多的人开始使用PRQL,我们收到了更多的错误报告——这是个好消息,但也给我们带来了更多工作。
- 填补剩余的功能空白,以便PRQL可以用于几乎所有标准SQL查询。
- 扩展我们支持的功能集——我们正在努力为模块/多文件项目和自动格式化添加实验性支持。
我们也在花时间思考:
- 让开始使用PRQL变得非常容易。我们通过与人们已经在使用的工具构建集成来实现这一点;例如VS Code扩展、Jupyter集成以及最近的qStudio集成。如果你熟悉的工具你认为可能会与PRQL集成,请在问题中告诉我们。
- 我们最初的所有决定是否正确——例如我们如何在
window
转换之外处理窗口函数。 - 使为编译器贡献变得更容易。我们有一个广泛的项目贡献者群体,但对编译器本身的贡献相对集中。我们希望扩大这一范围;#1840提供反馈,下面有一些入门问题的建议。
参与其中
要与PRQL保持联系:
- 在Twitter上关注我们
- 加入我们的Discord
- 为此仓库加星
- 贡献 — 通过编写代码(向我们发送你的用例!)或鼓励他人使用它来加入我们构建PRQL的行列。
- 查看PRQL的开发文档。入门很容易——只需几个命令就可以构建项目,而且我们是一个非常友好的社区!
- 对于那些可能有兴趣现在就为代码做贡献的人,请查看带有"good first issue"标签的问题。随时随地欢迎提问或开启草稿PR。
探索
- PRQL Playground — 在浏览器中试验PRQL。
- PRQL Book — 语言文档。
- Jupyter magic — 在Jupyter中运行PRQL,可以针对数据库,或通过DuckDB针对Pandas DataFrame / CSV / Parquet文件。
- pyprql文档 — pyprql的文档,PRQL的Python绑定,包括Jupyter magic。
- PRQL VS Code扩展
- prqlc-js — PRQL的JavaScript绑定。
仓库组织
这个仓库由以下部分组成:
- prqlc — 用rust编写的编译器,其主要作用是将PRQL编译成SQL。还包含CLI和各种语言的绑定。
- web — 我们的网络内容:Book、Website和Playground。
它还包含我们的测试/CI基础设施和开发工具。查看我们的开发文档以获取更多详细信息。
贡献者
非常感谢那些使我们的进展成为可能的人:
[贡献者图片]