-
Notifications
You must be signed in to change notification settings - Fork 151
Add missing SessionContext utility methods #1475
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -63,7 +63,8 @@ | |
| import polars as pl # type: ignore[import] | ||
|
|
||
| from datafusion.catalog import CatalogProvider, Table | ||
| from datafusion.expr import SortKey | ||
| from datafusion.common import DFSchema | ||
| from datafusion.expr import Expr, SortKey | ||
| from datafusion.plan import ExecutionPlan, LogicalPlan | ||
| from datafusion.user_defined import ( | ||
| AggregateUDF, | ||
|
|
@@ -1141,6 +1142,67 @@ def session_id(self) -> str: | |
| """Return an id that uniquely identifies this :py:class:`SessionContext`.""" | ||
| return self.ctx.session_id() | ||
|
|
||
| def session_start_time(self) -> str: | ||
| """Return the session start time as an RFC 3339 formatted string.""" | ||
| return self.ctx.session_start_time() | ||
|
|
||
| def enable_ident_normalization(self) -> bool: | ||
| """Return whether identifier normalization (lowercasing) is enabled.""" | ||
| return self.ctx.enable_ident_normalization() | ||
|
|
||
|
Comment on lines
+1145
to
+1152
|
||
| def parse_sql_expr(self, sql: str, schema: DFSchema) -> Expr: | ||
| """Parse a SQL expression string into a logical expression. | ||
|
|
||
| Args: | ||
| sql: SQL expression string. | ||
| schema: Schema to use for resolving column references. | ||
|
|
||
| Returns: | ||
| Parsed expression. | ||
| """ | ||
| from datafusion.expr import Expr # noqa: PLC0415 | ||
|
|
||
| return Expr(self.ctx.parse_sql_expr(sql, schema)) | ||
|
|
||
| def execute_logical_plan(self, plan: LogicalPlan) -> DataFrame: | ||
| """Execute a :py:class:`~datafusion.plan.LogicalPlan` and return a DataFrame. | ||
|
|
||
| Args: | ||
| plan: Logical plan to execute. | ||
|
|
||
| Returns: | ||
| DataFrame resulting from the execution. | ||
| """ | ||
| return DataFrame(self.ctx.execute_logical_plan(plan._raw_plan)) | ||
|
|
||
| def refresh_catalogs(self) -> None: | ||
| """Refresh catalog metadata.""" | ||
| self.ctx.refresh_catalogs() | ||
|
|
||
| def remove_optimizer_rule(self, name: str) -> bool: | ||
| """Remove an optimizer rule by name. | ||
|
|
||
| Args: | ||
| name: Name of the optimizer rule to remove. | ||
|
|
||
| Returns: | ||
| True if a rule with the given name was found and removed. | ||
| """ | ||
| return self.ctx.remove_optimizer_rule(name) | ||
|
|
||
| def table_provider(self, name: str) -> Table: | ||
| """Return the :py:class:`~datafusion.catalog.Table` for the given table name. | ||
|
|
||
| Args: | ||
| name: Name of the table. | ||
|
|
||
| Returns: | ||
| The table provider. | ||
| """ | ||
| from datafusion.catalog import Table # noqa: PLC0415 | ||
|
|
||
| return Table(self.ctx.table_provider(name)) | ||
|
|
||
| def read_json( | ||
| self, | ||
| path: str | pathlib.Path, | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
table_provider()currently propagates DataFusion errors directly. For consistency withtable()(which maps missing-table errors toKeyError), consider translating the “No table named …” / not-found case here toPyKeyErroras well so Python users get a consistent exception type when looking up a non-existent table provider.