In-process executor for semql FederatedPlans — runs per-backend fragments via caller-supplied adapters and merges results in DuckDB.
Project description
semql-engine
In-process executor for semql
FederatedPlan results. Runs each per-backend fragment via a
caller-supplied Adapter, materialises the rows into in-memory DuckDB,
then runs the plan's merge SQL against the assembled tables.
semql core stays sans-io. semql-engine is the opt-in package that
turns a FederatedPlan into result rows when you want the cross-source
execution done for you.
Install
pip install semql-engine
Quickstart
import duckdb
from semql import Catalog, compile_federated_query
from semql_engine import DuckDBAdapter, Engine
catalog = Catalog([...]) # cubes spanning multiple backends
plan = compile_federated_query(query, catalog.as_dict())
engine = Engine()
engine.register(Dialect.POSTGRES, my_pg_adapter)
engine.register(Dialect.BIGQUERY, my_bq_adapter)
rows = list(engine.run(plan))
What it does
For every fragment in the plan, the engine calls the adapter registered
for that backend with (sql, params). It loads the resulting rows into
a DuckDB table named frag_<i> (matching FederatedPlan.fragments
indices) and finally runs plan.merge.sql to produce the merged shape.
Single-fragment plans (single-backend queries that went through
compile_federated_query anyway) work transparently — the merge is a
pass-through.
Adapters
An Adapter is anything with execute(sql, params) -> AdapterResult
where AdapterResult carries columns: list[str] and an iterable of
row dicts. Built-ins:
DuckDBAdapter(con)— runs the SQL inside an existing DuckDB connection. Useful for local CSV / Parquet enrichment cubes.DBAPIAdapter(con)— wraps any PEP-249 connection (psycopg, mysql, sqlite, etc).
Bring your own for warehouses that need a vendor SDK.
Scope
v1 mirrors compile_federated_query v1:
- Sum / count / avg supported (avg is decomposed at compile and recomposed in the merge SQL); other aggregations are refused by the compiler before the engine ever sees them.
- Equality bridge joins only.
- No
comparemode, no booleanwheretree across backends.
The engine itself is small; most of the federation logic lives in
semql.federate.
Status
Early development. The Adapter contract is stable; the federation
shape mirrors compile_federated_query v1 (sum / count / avg and
equality bridge joins only).
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file semql_engine-0.5.0.tar.gz.
File metadata
- Download URL: semql_engine-0.5.0.tar.gz
- Upload date:
- Size: 22.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
599080470ecba6183e246d53f69afe27041edff282cd862ce9952c9a68ab682d
|
|
| MD5 |
16f9993eed4bb828ea151ef67bb4b6fb
|
|
| BLAKE2b-256 |
01afbffecc2a93367ab8e26855abe57ea4f707b20c2c32be2d26df4f0e8b40aa
|
File details
Details for the file semql_engine-0.5.0-py3-none-any.whl.
File metadata
- Download URL: semql_engine-0.5.0-py3-none-any.whl
- Upload date:
- Size: 26.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c18b85714b856eea82bab6f77cdd695449fdc6c4f8aa6e784f97043df97c6a3
|
|
| MD5 |
57ecc3a33549d58592d6ff21cebfa490
|
|
| BLAKE2b-256 |
bad8d1ffdc897f658d90326fa1ad5d6d7b009c89966cde72c60dcb6b72080b33
|