One expression, every engine. Written once in the Ledger, compiled for Snowflake, Databricks, DuckDB, Postgres and more.
productxorq anywhere
One expression. Every engine.
Write the definition once. Xorq compiles it to whichever engine holds the data, moves only the aggregates a step needs, and records one entry no matter where it ran.
compileThe same expression becomes native SQL per engine
moveArrow Flight carries aggregates between steps
stayBulk rows never leave the system that holds them
recordOne Ledger entry, one hash, wherever it ran
01write once, run on any engine
Written once in the Ledger. Compiled for whatever holds the data.
An expression in the Ledger is not SQL. It compiles to the SQL of whichever engine it is pointed at, and the hash, lineage, and approval stay the same across all of them.
xorq anywhere · revenue_west_q3 · compile@7be9896e · same hash on every engine
schema · region: string · revenue: decimal(18,2)sources · sales @v31approved · M. Chen · 2d ago
compiles to
SELECT region, SUM(amount) AS revenueFROM ANALYTICS.SALESWHERE quarter = 'Q3' AND region = 'West'GROUP BY region-- warehouse: FINANCE_WH · dialect: snowflake
SELECT region, sum(amount) AS revenueFROM read_parquet('s3://lake/sales/*.parquet')WHERE quarter = 'Q3' AND region = 'West'GROUP BY region-- engine: duckdb · local sandbox · zero-copy arrow
SELECT region, sum(amount) AS revenueFROM public.salesWHERE quarter = 'Q3' AND region = 'West'GROUP BY region;-- engine: postgres 16 · read replica
SELECT region, SUM(amount) AS revenueFROM finance.salesWHERE quarter = 'Q3' AND region = 'West'GROUP BY region-- engine: databricks sql · dialect: spark
same lineage · same cache key · same approvercache HIT on any engine
02multi-engine pipelines
One question, three systems, one answer.
Most real questions span systems. Xorq lets each step run where its data lives and where it is cheapest, then joins the results in a sandbox you control. The Ledger sees one entry.
step 1 · snowflakebilling.invoices · 2.1B rowsFiltered and aggregated where the rows live. Only 40k aggregate rows leave.
step 2 · postgrescrm.accounts · 180k rowsAccount owners and segments, read from the replica.
→→
step 3 · duckdb · local sandboxjoin · enrich · python udfAggregates arrive over Arrow Flight. The join and a scoring UDF run next to the analyst, not in the warehouse.
→
step 4 · ledgerrevenue_by_owner_q3 · @3f1a9c02One entry. Lineage names all three engines and the UDF version. Cached under one hash.
bulk rows stay put·arrow moves aggregates·each step runs on the engine that fits it
03why it matters
Portability, cost, and governance from the same fact.
Because the definition is separate from the engine, the same entry is portable across warehouses, routable to the cheapest place, and governed by one hash.
portabilityMetrics outlive the warehouseA definition is not tied to the dialect it was first written in. Move engines, add a lakehouse, or run locally, and the Ledger entries come along unchanged.
costRoute each step to the cheapest placeHeavy scans on the warehouse, joins and Python in a local sandbox, small lookups on Postgres. The expression decides; nobody rewrites SQL.
governanceOne hash across every engineBecause the key is the expression and its sources, the cache, the lineage, and the approval hold whether the run happened on Snowflake or DuckDB.
04engines
Runs on what you already run.
Connections use your existing credentials. Adding an engine is a profile, not a migration.
Snowflake
Databricks
BigQuery
DuckDB
Postgres
Trino
Parquet · S3 · files
Python UDFs · Arrow Flight
// bring a question that spans two systems
Run it as one expression.
In a working session we take a metric that currently needs an export and a spreadsheet to assemble, and run it end to end across your engines as a single Ledger entry.
Copy our address and paste it into whichever email client you use.
consent — cookies.txt
$
We use cookieless analytics to measure traffic. With your consent, we also enable product
analytics, session recording, and Google Ads conversion tracking, which store data in
your browser. Read our
Privacy Policy.