4646 import pandas as pd
4747 import polars as pl
4848
49+ from datafusion import TableProvider
4950 from datafusion .plan import ExecutionPlan , LogicalPlan
5051
5152
@@ -734,7 +735,7 @@ def from_polars(self, data: pl.DataFrame, name: str | None = None) -> DataFrame:
734735 # https://github.com/apache/datafusion-python/pull/1016#discussion_r1983239116
735736 # is the discussion on how we arrived at adding register_view
736737 def register_view (self , name : str , df : DataFrame ) -> None :
737- """Register a :py:class: `~datafusion.detaframe .DataFrame` as a view.
738+ """Register a :py:class:`~datafusion.dataframe .DataFrame` as a view.
738739
739740 Args:
740741 name (str): The name to register the view under.
@@ -743,16 +744,31 @@ def register_view(self, name: str, df: DataFrame) -> None:
743744 view = df .into_view ()
744745 self .ctx .register_table (name , view )
745746
746- def register_table (self , name : str , table : Table ) -> None :
747- """Register a :py:class: `~datafusion.catalog.Table` as a table.
747+ def register_table (
748+ self , name : str , table : Table | TableProvider | TableProviderExportable
749+ ) -> None :
750+ """Register a :py:class:`~datafusion.catalog.Table` or ``TableProvider``.
748751
749- The registered table can be referenced from SQL statement executed against.
752+ The registered table can be referenced from SQL statements executed against
753+ this context.
754+
755+ Plain :py:class:`~datafusion.dataframe.DataFrame` objects are not supported;
756+ convert them first with :meth:`datafusion.dataframe.DataFrame.into_view` or
757+ :meth:`datafusion.catalog.TableProvider.from_dataframe`.
758+
759+ Objects implementing ``__datafusion_table_provider__`` are also supported
760+ and treated as :class:`~datafusion.catalog.TableProvider` instances.
750761
751762 Args:
752763 name: Name of the resultant table.
753- table: DataFusion table to add to the session context.
764+ table: DataFusion :class:`Table`, :class:`TableProvider`, or any object
765+ implementing ``__datafusion_table_provider__`` to add to the session
766+ context.
754767 """
755- self .ctx .register_table (name , table .table )
768+ if isinstance (table , Table ):
769+ self .ctx .register_table (name , table .table )
770+ else :
771+ self .ctx .register_table (name , table )
756772
757773 def deregister_table (self , name : str ) -> None :
758774 """Remove a table from the session."""
@@ -772,14 +788,21 @@ def register_catalog_provider(
772788 self .ctx .register_catalog_provider (name , provider )
773789
774790 def register_table_provider (
775- self , name : str , provider : TableProviderExportable
791+ self , name : str , provider : Table | TableProvider | TableProviderExportable
776792 ) -> None :
777793 """Register a table provider.
778794
779- This table provider must have a method called ``__datafusion_table_provider__``
780- which returns a PyCapsule that exposes a ``FFI_TableProvider``.
795+ Deprecated: use :meth:`register_table` instead.
796+
797+ Objects implementing ``__datafusion_table_provider__`` are also supported
798+ and treated as :class:`~datafusion.catalog.TableProvider` instances.
781799 """
782- self .ctx .register_table_provider (name , provider )
800+ warnings .warn (
801+ "register_table_provider is deprecated; use register_table" ,
802+ DeprecationWarning ,
803+ stacklevel = 2 ,
804+ )
805+ self .register_table (name , provider )
783806
784807 def register_udtf (self , func : TableFunction ) -> None :
785808 """Register a user defined table function."""
0 commit comments