管道式关系查询语言(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]。