Crates.io | prqlc |
lib.rs | prqlc |
version | 0.13.2 |
source | src |
created_at | 2023-01-19 06:49:36.684287 |
updated_at | 2024-10-11 23:23:54.672606 |
description | PRQL is a modern language for transforming data — a simple, powerful, pipelined SQL replacement. |
homepage | |
repository | https://github.com/PRQL/prql |
max_upload_size | |
id | 762366 |
size | 1,838,108 |
prqlc
is the reference implementation of a compiler from PRQL to SQL, written
in Rust. It also serves as the CLI.
For more on PRQL, check out the PRQL website or the PRQL repo.
prqlc
serves as a CLI for the PRQL compiler. It is a single, dependency-free
binary that compiles PRQL into SQL.
prqlc compile
This command works as a filter that compiles a PRQL string into an SQL string.
$ echo 'from employees | filter has_dog | select salary' | prqlc compile
SELECT
salary
FROM
employees
WHERE
has_dog
A PRQL query can be executed with CLI tools compatible with SQL, such as 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 │
└──────────┴───────────────────────────────────────┴───────────┘
Executing this command without any argument will start interactive mode,
allowing a PRQL query to be written interactively. In this mode, after writing
PRQL and press Ctrl-d
(Linux, macOS) or Ctrl-z
(Windows) to display the
compiled SQL.
prqlc compile
Just like when using it as a filter, SQL string output can be passed to the DuckDB CLI and similar tools.
$ 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 │
└──────────┴───────────────────────────────────────┴───────────┘
brew install prqlc
winget install prqlc
Precompiled binaries are available for Linux, macOS, and Windows on the PRQL release page.
# From crates.io
cargo install prqlc
# From a local PRQL repository
cargo install --path prqlc/prqlc
The prqlc shell-completion
command prints a shell completion script for
supported shells, and saving the printed scripts to files makes for shells to
load completions for each session.
For Linux:
prqlc shell-completion bash >/etc/bash_completion.d/prqlc
For macOS:
prqlc shell-completion bash >/usr/local/etc/bash_completion.d/prqlc
prqlc shell-completion fish >~/.config/fish/completions/prqlc.fish
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
prqlc shell-completion zsh >"${fpath[1]}/_prqlc"
Ensure that the following lines are present in ~/.zshrc
:
autoload -U compinit
compinit -i
Cheat sheets for prqlc
are available on various websites and with various
tools.
tldr
(on the web)eg
For more usage examples and the library documentation, check out the
prqlc
documentation.
cargo add prqlc
Compile a PRQL string to a SQLite dialect string:
// 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);