19
19
20
20
from __future__ import annotations
21
21
22
- import warnings
23
22
from abc import ABC , abstractmethod
24
23
from typing import TYPE_CHECKING , Any , Protocol
25
24
26
25
import datafusion ._internal as df_internal
27
- from datafusion ._internal import EXPECTED_PROVIDER_MSG
28
- from datafusion .utils import _normalize_table_provider
29
26
30
27
if TYPE_CHECKING :
31
28
import pyarrow as pa
32
29
30
+ from datafusion import DataFrame
33
31
from datafusion .context import TableProviderExportable
34
32
35
33
try :
@@ -139,8 +137,7 @@ def register_table(
139
137
Objects implementing ``__datafusion_table_provider__`` are also supported
140
138
and treated as table provider instances.
141
139
"""
142
- provider = _normalize_table_provider (table )
143
- return self ._raw_schema .register_table (name , provider )
140
+ return self ._raw_schema .register_table (name , table )
144
141
145
142
def deregister_table (self , name : str ) -> None :
146
143
"""Deregister a table provider from this schema."""
@@ -152,101 +149,37 @@ class Database(Schema):
152
149
"""See `Schema`."""
153
150
154
151
155
- _InternalRawTable = df_internal .catalog .RawTable
156
- _InternalTableProvider = df_internal .TableProvider
157
-
158
- # Keep in sync with ``datafusion._internal.TableProvider.from_view``.
159
- _FROM_VIEW_WARN_STACKLEVEL = 2
160
-
161
-
162
152
class Table :
163
153
"""DataFusion table or table provider wrapper."""
164
154
165
- __slots__ = ("_table " ,)
155
+ __slots__ = ("_inner " ,)
166
156
167
157
def __init__ (
168
158
self ,
169
- table : _InternalRawTable | _InternalTableProvider | Table ,
159
+ table : DataFrame | TableProviderExportable | pa . dataset . Dataset ,
170
160
) -> None :
171
161
"""Wrap a low level table or table provider."""
172
- if isinstance (table , Table ):
173
- table = table .table
174
-
175
- if not isinstance (table , (_InternalRawTable , _InternalTableProvider )):
176
- raise TypeError (EXPECTED_PROVIDER_MSG )
177
-
178
- self ._table = table
179
-
180
- def __getattribute__ (self , name : str ) -> Any :
181
- """Restrict provider-specific helpers to compatible tables."""
182
- if name == "__datafusion_table_provider__" :
183
- table = object .__getattribute__ (self , "_table" )
184
- if not hasattr (table , "__datafusion_table_provider__" ):
185
- raise AttributeError (name )
186
- return object .__getattribute__ (self , name )
162
+ self ._inner = df_internal .catalog .RawTable (table )
187
163
188
164
def __repr__ (self ) -> str :
189
165
"""Print a string representation of the table."""
190
- return repr (self ._table )
191
-
192
- @property
193
- def table (self ) -> _InternalRawTable | _InternalTableProvider :
194
- """Return the wrapped low level table object."""
195
- return self ._table
166
+ return repr (self ._inner )
196
167
197
- @classmethod
198
- def from_dataset (cls , dataset : pa .dataset .Dataset ) -> Table :
168
+ @deprecated ("Use Table() constructor instead." )
169
+ @staticmethod
170
+ def from_dataset (dataset : pa .dataset .Dataset ) -> Table :
199
171
"""Turn a :mod:`pyarrow.dataset` ``Dataset`` into a :class:`Table`."""
200
- return cls (_InternalRawTable .from_dataset (dataset ))
201
-
202
- @classmethod
203
- def from_capsule (cls , capsule : Any ) -> Table :
204
- """Create a :class:`Table` from a PyCapsule exported provider."""
205
- provider = _InternalTableProvider .from_capsule (capsule )
206
- return cls (provider )
207
-
208
- @classmethod
209
- def from_dataframe (cls , df : Any ) -> Table :
210
- """Create a :class:`Table` from tabular data."""
211
- from datafusion .dataframe import DataFrame as DataFrameWrapper
212
-
213
- dataframe = df if isinstance (df , DataFrameWrapper ) else DataFrameWrapper (df )
214
- return dataframe .into_view ()
215
-
216
- @classmethod
217
- def from_view (cls , df : Any ) -> Table :
218
- """Deprecated helper for constructing tables from views."""
219
- from datafusion .dataframe import DataFrame as DataFrameWrapper
220
-
221
- if isinstance (df , DataFrameWrapper ):
222
- df = df .df
223
-
224
- provider = _InternalTableProvider .from_view (df )
225
- warnings .warn (
226
- "Table.from_view is deprecated; use DataFrame.into_view or "
227
- "Table.from_dataframe instead." ,
228
- category = DeprecationWarning ,
229
- stacklevel = _FROM_VIEW_WARN_STACKLEVEL ,
230
- )
231
- return cls (provider )
172
+ return Table (dataset )
232
173
233
174
@property
234
175
def schema (self ) -> pa .Schema :
235
176
"""Returns the schema associated with this table."""
236
- return self ._table .schema
177
+ return self ._inner .schema
237
178
238
179
@property
239
180
def kind (self ) -> str :
240
181
"""Returns the kind of table."""
241
- return self ._table .kind
242
-
243
- def __datafusion_table_provider__ (self ) -> Any :
244
- """Expose the wrapped provider for FFI integrations."""
245
- exporter = getattr (self ._table , "__datafusion_table_provider__" , None )
246
- if exporter is None :
247
- msg = "Underlying object does not export __datafusion_table_provider__()"
248
- raise AttributeError (msg )
249
- return exporter ()
182
+ return self ._inner .kind
250
183
251
184
252
185
class CatalogProvider (ABC ):
0 commit comments