Skip to content

Commit e1fecc4

Browse files
committed
removing unnecessary fix
Signed-off-by: Cortland Goffena <30168413+cmgoffena13@users.noreply.github.com>
1 parent 412e763 commit e1fecc4

2 files changed

Lines changed: 1 addition & 102 deletions

File tree

‎sqlmesh/core/engine_adapter/databricks.py‎

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -31,34 +31,6 @@
3131
logger = logging.getLogger(__name__)
3232

3333

34-
def _to_pandas(table: t.Any) -> pd.DataFrame:
35-
"""Convert a databricks-sql-connector fetchall_arrow() result to pandas.
36-
37-
Connector 4.x makes PyArrow optional. When PyArrow cannot be imported (PyArrow 25
38-
requires NumPy >= 2), fetchall_arrow() returns a ColumnTable with ``column_names``
39-
and ``column_table`` instead of a PyArrow table.
40-
"""
41-
import pandas as pd
42-
43-
to_pandas = getattr(table, "to_pandas", None)
44-
if callable(to_pandas):
45-
return to_pandas()
46-
47-
column_names = getattr(table, "column_names", None)
48-
column_table = getattr(table, "column_table", None)
49-
if column_names is None or column_table is None:
50-
raise SQLMeshError(
51-
f"Unexpected Databricks fetchall_arrow() result {type(table).__name__!r} "
52-
"with no to_pandas(). PyArrow may be missing or incompatible with the "
53-
"installed NumPy (PyArrow 25+ requires NumPy >= 2)."
54-
)
55-
56-
# Build from rows so duplicate names are kept. A dict would collapse them,
57-
# which is not what PyArrow's to_pandas() does.
58-
columns = [list(values) for values in column_table]
59-
return pd.DataFrame(list(zip(*columns)), columns=list(column_names))
60-
61-
6234
def _query_tags(
6335
query_tags: t.Optional[t.Union[exp.Expr, str, int, float, bool]],
6436
) -> t.Optional[t.Dict[str, t.Optional[str]]]:
@@ -305,7 +277,7 @@ def _fetch_native_df(
305277
query, quote_identifiers=quote_identifiers
306278
)
307279
self.execute(query)
308-
return _to_pandas(self.cursor.fetchall_arrow())
280+
return self.cursor.fetchall_arrow().to_pandas()
309281

310282
def fetchdf(
311283
self, query: t.Union[exp.Expr, str], quote_identifiers: bool = False

‎tests/core/engine_adapter/test_databricks.py‎

Lines changed: 0 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -837,76 +837,3 @@ def test_databricks_connect_cluster_id_not_overridden_by_falsy_serverless(
837837
token="mytoken",
838838
cluster_id="0123-456789-mycluster",
839839
)
840-
841-
842-
def test_fetch_native_df_uses_arrow_to_pandas(make_mocked_engine_adapter: t.Callable):
843-
adapter = make_mocked_engine_adapter(DatabricksEngineAdapter, default_catalog="test_catalog")
844-
arrow_table = pd.DataFrame({"name": ["orders"]})
845-
fetchall_arrow = adapter.cursor.fetchall_arrow
846-
fetchall_arrow.return_value.to_pandas.return_value = arrow_table
847-
848-
df = adapter._fetch_native_df("SELECT 1")
849-
850-
assert df.to_dict(orient="records") == [{"name": "orders"}]
851-
fetchall_arrow.return_value.to_pandas.assert_called_once_with()
852-
853-
854-
def test_fetch_native_df_column_table_without_to_pandas(make_mocked_engine_adapter: t.Callable):
855-
"""PyArrow 25 fails to import on NumPy < 2, so the connector returns a ColumnTable."""
856-
adapter = make_mocked_engine_adapter(DatabricksEngineAdapter, default_catalog="test_catalog")
857-
858-
class _ColumnTable:
859-
column_names = ["name", "schema", "catalog", "type"]
860-
column_table = [("orders",), ("analytics",), ("main",), ("table",)]
861-
862-
adapter.cursor.fetchall_arrow.return_value = _ColumnTable()
863-
864-
df = adapter._fetch_native_df("SELECT 1")
865-
866-
assert df.to_dict(orient="records") == [
867-
{"name": "orders", "schema": "analytics", "catalog": "main", "type": "table"}
868-
]
869-
870-
871-
def test_fetch_native_df_empty_column_table(make_mocked_engine_adapter: t.Callable):
872-
adapter = make_mocked_engine_adapter(DatabricksEngineAdapter, default_catalog="test_catalog")
873-
874-
class _ColumnTable:
875-
column_names = ["name", "schema", "catalog", "type"]
876-
column_table = [(), (), (), ()]
877-
878-
adapter.cursor.fetchall_arrow.return_value = _ColumnTable()
879-
880-
df = adapter._fetch_native_df("SELECT 1")
881-
882-
assert list(df.columns) == ["name", "schema", "catalog", "type"]
883-
assert df.empty
884-
885-
886-
def test_fetch_native_df_column_table_keeps_duplicate_columns(
887-
make_mocked_engine_adapter: t.Callable,
888-
):
889-
adapter = make_mocked_engine_adapter(DatabricksEngineAdapter, default_catalog="test_catalog")
890-
891-
class _ColumnTable:
892-
column_names = ["a", "a"]
893-
column_table = [("x",), ("y",)]
894-
895-
adapter.cursor.fetchall_arrow.return_value = _ColumnTable()
896-
897-
df = adapter._fetch_native_df("SELECT 1")
898-
899-
assert list(df.columns) == ["a", "a"]
900-
assert df.iloc[0].tolist() == ["x", "y"]
901-
902-
903-
def test_fetch_native_df_rejects_unknown_arrow_result(make_mocked_engine_adapter: t.Callable):
904-
adapter = make_mocked_engine_adapter(DatabricksEngineAdapter, default_catalog="test_catalog")
905-
906-
class _Weird:
907-
pass
908-
909-
adapter.cursor.fetchall_arrow.return_value = _Weird()
910-
911-
with pytest.raises(SQLMeshError, match="Unexpected Databricks fetchall_arrow"):
912-
adapter._fetch_native_df("SELECT 1")

0 commit comments

Comments
 (0)