Session reference¶
Session registers data sources and runs DataFusion SQL queries.
Register data sources¶
register_tstable(...)registers every committed segment in a managed table root.register_parquet(...)registers an unmanaged Parquet file or directory.
Both sources use the same SQL query API.
A directory passed to register_parquet(...) must contain at least one Parquet
file so DataFusion can infer its schema. Registering an empty directory raises
DataFusionError.
Choose a result type¶
| Method | Return type | Use when |
|---|---|---|
sql(...) |
pyarrow.Table |
The complete result fits in memory |
sql_reader(...) |
pyarrow.RecordBatchReader |
You want to process large results in batches |
See Stream query results for usage and Streaming query performance for benchmarks. For integer-index query rules, see Integer ordered indexes.
Session.sql(...) returns a normal pyarrow.Table, so it can be passed to
other Arrow-compatible libraries. For example, after installing Polars:
SQL result rows have no guaranteed order unless the query includes an
ORDER BY clause.
Queries use DataFusion SQL. See the DataFusion SQL reference for supported syntax and functions.
API¶
__init__() -> None
¶
Create a new DataFusion-backed SQL session.
The session runs async Rust internals on an internal Tokio runtime and releases the GIL while executing queries.
deregister(name: str) -> None
¶
Deregister a previously registered table name.
Raises:
| Type | Description |
|---|---|
ValueError:
|
If |
KeyError:
|
If |
register_parquet(name: str, path: str) -> None
¶
Register a Parquet file or directory under a name for SQL queries.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
SQL table name to register under. |
required |
path
|
str
|
Path to a Parquet file or a directory of Parquet files. |
required |
Notes
If name is already registered, it is replaced atomically (with rollback on failure).
register_tstable(name: str, table_root: str) -> None
¶
Register a time-series table under a name for SQL queries.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
SQL table name to register under. |
required |
table_root
|
str
|
Filesystem directory containing the table. |
required |
Notes
If name is already registered, it is replaced atomically (with rollback on failure).
sql(query: str, *, params: object | None = None) -> pyarrow.Table
¶
Run a SQL query and return the results as a pyarrow.Table.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
query
|
str
|
SQL query string. |
required |
params
|
object | None
|
Optional query parameter values for DataFusion SQL placeholders:
Supported Python value types: |
None
|
Notes
DataFusion infers placeholder types from context when possible (e.g. in WHERE clauses).
If you use placeholders in a SELECT projection without type context, you may need an
explicit cast, e.g. SELECT CAST($1 AS BIGINT) AS x.
sql_reader(query: str, *, params: object | None = None) -> pyarrow.RecordBatchReader
¶
Run a SQL query and return a streaming pyarrow.RecordBatchReader.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
query
|
str
|
SQL query string. |
required |
params
|
object | None
|
Optional query parameter values for DataFusion SQL placeholders. |
None
|
Notes
Unlike Session.sql(...), this does not materialize the full result eagerly.
Iterate batches incrementally or call reader.read_all() if you want a
pyarrow.Table.
tables() -> list[str]
¶
Return the list of currently registered table names (sorted).