The query engine for the Iceberg lakehouse.
One binary. Embedded like DuckDB, or a server that scales out like Trino — same SQL, same Iceberg semantics, same per-query identity. Every query runs as the authenticated user, no service account, no shared root.
Build from source: cargo install --path crates/sqe-cli, Apache-2.0, Rust, no JVM.
Same query. Same result. Same identity model.
The lakehouse engine you actually own.
Top-five on the public Iceberg matrix
167/189 cells. The only non-Spark engine in the top five — scored against the public rubric, not a vendor spec sheet.
See the matrix →Benchmark suites won vs Trino 465
222 of 222 queries pass at SF1. Up to 18.5× faster on TPC-E. Reproducible with one script.
See the receipts →Service accounts. Zero shared roots.
Every query runs as the authenticated user. The bearer token flows through to the catalog and storage. Policy is enforced before the optimizer runs.
vs Trino →Binary, laptop to cluster
A DuckDB-class embedded engine and a distributed coordinator share one SQL surface.
Cross-catalog joins, runtime ATTACH, persistent local warehouse.
Everything in one engine.
Iceberg-native read + write
Native Iceberg V2 + V3
Read and write, not read-only. Position & equality deletes, merge-on-read, copy-on-write, schema evolution.
7 catalog backends
Polaris, Nessie, Unity Catalog OSS, AWS Glue, S3 Tables, Hive Metastore, JDBC, plus Hadoop storage. Multi-cloud.
Per-query identity
Per-query identity
OIDC password grant; the user's bearer token is passed through to the catalog and S3 on every query.
Policy as plan rewriting
Row filters and column masks via OPA or Cedar, enforced at the LogicalPlan layer before the optimizer runs.
Column-level lineage
Native OpenLineage 2-0-2 emitter with column-level lineage on writes. File and HTTP sinks, disk-spool fallback.
Open + everywhere
One binary, two modes
Embedded single-process engine and distributed coordinator + stateless workers, the same SQL surface, the same binary.
Two wire protocols
Arrow Flight SQL and Trino HTTP from the same coordinator. Connect existing Trino clients unchanged.
Rust, no JVM
Sub-second cold start. A C++/DuckDB-class footprint with a distributed story the JVM engines charge for.
Two commands to a SQL prompt.
Embedded — one binary, no cluster
git clone https://github.com/schubergphilis/sqe && cd sqe
cargo install --path crates/sqe-cli
sqe-cli --embedded # persistent warehouse at ~/.sqe/warehouse/
sqe> SELECT * FROM '/data/sales.parquet' LIMIT 5;
sqe> SELECT * FROM read_csv('s3://bucket/orders.tsv.gz');
sqe> ATTACH 'http://catalog.example.com/api/catalog' AS partner_cat
(TYPE iceberg_rest, WAREHOUSE 'analytics');
sqe> SELECT * FROM partner_cat.sales.orders LIMIT 10; Server — Polaris + Keycloak + SQE locally
git clone https://github.com/schubergphilis/sqe
cd sqe/quickstart/polaris-keycloak-client-id
docker compose up -d # Polaris + Keycloak + MinIO + SQE
# Connect over Arrow Flight SQL
docker compose exec sqe sqe-cli --port 50051 --user adminuser
sqe> SHOW CATALOGS; Full quickstart covering all seven catalog backends → docs.getsqe.com
One engine instead of two.
| SQE | Trino | DuckDB | |
|---|---|---|---|
| Embedded mode (one binary) | yes | no | yes |
| Distributed mode | yes | yes | no |
| Iceberg V2 + V3 read + write | native | V2 + partial V3 | read-only |
| Per-query OIDC passthrough | yes | service acct only | n/a |
| OPA / Cedar at LogicalPlan | yes | no | no |
| Multi-catalog in one engine | 7 backends | one at a time | per-extension |
| Wire protocols | Flight SQL + Trino | Trino HTTP | extension |
| Runtime | Rust, no JVM | JVM | C++ |
| Cold start | sub-second | tens of seconds | sub-second |
| OpenLineage emitter | native, column-level | plugin | no |
Performance — SF1, vs Trino 465
| Suite | SQE | Trino | Speedup | Pass |
|---|---|---|---|---|
| TPC-H (22) | 16.8s | 26.7s | 1.6x | 22/22 |
| SSB (13) | 8.3s | 5.8s | 0.70x slower | 13/13 |
| TPC-DS (99) | 13.4s | 45.6s | 3.4x | 93/99 |
| TPC-C (8 read) | 0.41s | 2.65s | 6.5x | 8/8 |
| TPC-E (11) | 9.3s | 172.0s | 18.5x | 11/11 |
| TPC-BB (10) | 28.0s | 255.7s | 9.1x | 10/10 |
| ClickBench (43) | 1.3s | 4.46s | 3.4x | 43/43 |
SQE wins six of seven suites. 222/222 queries pass. SSB is the one suite SQE trails —
lineorder’s uniform FK distribution defeats row-group pruning. Run your own with
BENCH_SCALE=1 ./scripts/benchmark-test.sh --compare-trino.
Recently shipped
- Jun 2026 Read-only ops web UI, in the binary
- May 2026 DuckDB-class embedded mode — file TVFs,
hf://, Delta reader - May 2026 Column-level OpenLineage emitter