#prql #sql #language #pipeline #compile #compiler #replace

bin+lib prqlc

PRQL 是一种用于转换数据的现代语言——一种简单、强大的、管道化的 SQL 替代品

24 个版本 (9 个重大更新)

0.13.0 2024年7月25日
0.11.3 2024年2月11日
0.11.1 2023年12月26日
0.10.1 2023年11月14日
0.6.1 2023年3月13日

#45 in 数据库接口

Download history 1155/week @ 2024-05-01 3289/week @ 2024-05-08 2622/week @ 2024-05-15 2427/week @ 2024-05-22 1999/week @ 2024-05-29 2316/week @ 2024-06-05 1802/week @ 2024-06-12 2040/week @ 2024-06-19 2462/week @ 2024-06-26 2336/week @ 2024-07-03 2546/week @ 2024-07-10 1825/week @ 2024-07-17 2107/week @ 2024-07-24 1975/week @ 2024-07-31 1721/week @ 2024-08-07 1381/week @ 2024-08-14

7,583 每月下载量
8 个 Crates 中使用 (6 个直接使用)

Apache-2.0

1MB
24K SLoC

PRQL 编译器

prqlc 是从 PRQL 到 SQL 的编译器的参考实现,用 Rust 编写。它还充当 CLI。

有关 PRQL 的更多信息,请访问 PRQL 网站PRQL 仓库

命令行界面

prqlc 充当 PRQL 编译器的 CLI。它是一个独立的、无依赖的二进制文件,可以将 PRQL 编译成 SQL。

用法

prqlc compile

此命令作为一个过滤器,将 PRQL 字符串编译成 SQL 字符串。

$ echo 'from employees | filter has_dog | select salary' | prqlc compile

SELECT
  salary
FROM
  employees
WHERE
  has_dog

可以使用与 SQL 兼容的 CLI 工具执行 PRQL 查询,例如 DuckDB CLI

$ curl -fsL https://raw.githubusercontent.com/PRQL/prql/0.12.2/prqlc/prqlc/tests/integration/data/chinook/albums.csv -o albums.csv
$ echo 'from `albums.csv` | take 3' | prqlc compile | duckdb
┌──────────┬───────────────────────────────────────┬───────────┐
 album_id │                 title                 │ artist_id │
  int64   │                varchar                │   int64   │
├──────────┼───────────────────────────────────────┼───────────┤
        1 │ For Those About To Rock We Salute You │         1 │
        2 │ Balls to the Wall                     │         2 │
        3 │ Restless and Wild                     │         2 │
└──────────┴───────────────────────────────────────┴───────────┘

不传递任何参数执行此命令将启动交互模式,允许交互式编写 PRQL 查询。在此模式下,编写 PRQL 并按 Ctrl-d(Linux,macOS)或 Ctrl-z(Windows)显示编译后的 SQL。

prqlc compile

与作为过滤器使用时一样,可以将 SQL 字符串输出传递给 DuckDB CLI 和类似工具。

$ prqlc compile | duckdb
Enter PRQL, then press ctrl-d to compile:

from `albums.csv`
take 3
┌──────────┬───────────────────────────────────────┬───────────┐
 album_id │                 title                 │ artist_id │
  int64   │                varchar                │   int64   │
├──────────┼───────────────────────────────────────┼───────────┤
        1 │ For Those About To Rock We Salute You │         1 │
        2 │ Balls to the Wall                     │         2 │
        3 │ Restless and Wild                     │         2 │
└──────────┴───────────────────────────────────────┴───────────┘

安装

Packaging status

通过 Homebrew(macOS,Linux)

brew install prqlc

通过 winget(Windows)

winget install prqlc

从 GitHub 发布页面

PRQL 发布页面 上提供适用于 Linux、macOS 和 Windows 的预编译二进制文件。

从源代码

# From crates.io
cargo install prqlc
# From a local PRQL repository
cargo install --path prqlc/prqlc

Shell 完整性

prqlc shell-completion 命令打印支持 Shell 的 shell 完整性脚本,并将打印的脚本保存到文件中,使 Shell 能够为每个会话加载完整性。

Bash

对于 Linux

prqlc shell-completion bash >/etc/bash_completion.d/prqlc

对于 macOS

prqlc shell-completion bash >/usr/local/etc/bash_completion.d/prqlc

fish

prqlc shell-completion fish >~/.config/fish/completions/prqlc.fish

PowerShell

mkdir -Path (Split-Path -Parent $profile) -ErrorAction SilentlyContinue
prqlc shell-completion powershell >path/to/prqlc.ps1
echo 'Invoke-Expression -Command path/to/prqlc.ps1' >>$profile

zsh

prqlc shell-completion zsh >"${fpath[1]}/_prqlc"

请确保以下行出现在~/.zshrc

autoload -U compinit
compinit -i

助手

关于prqlc的速查表可在多个网站和各种工具中找到。

有关更多使用示例和库文档,请查看prqlc的文档。

库安装

cargo add prqlc

示例

将PRQL字符串编译成SQLite方言字符串

// In a file src/main.rs

use prqlc::{compile, Options, DisplayOptions, Target, sql::Dialect};

let prql = "from employees | select {name, age}";
let opts = &Options {
    format: false,
    target: Target::Sql(Some(Dialect::SQLite)),
    signature_comment: false,
    display: DisplayOptions::Plain,
    ..Default::default()
};
let sql = compile(&prql, opts).unwrap();
assert_eq!("SELECT name, age FROM employees", sql);

依赖关系

~9–33MB
~501K SLoC