From 0a8b2018f5a8cd228b172e9faeab91b0538d20f8 Mon Sep 17 00:00:00 2001 From: Jim Crist-Harif Date: Tue, 29 Aug 2023 16:16:39 -0500 Subject: [PATCH] feat(pyspark): implement `Backend.rename_table` BREAKING CHANGE: `PySparkTable.rename` is removed, use `Backend.rename_table` instead. --- ibis/backends/pyspark/__init__.py | 13 +++++++++++++ ibis/backends/pyspark/client.py | 26 -------------------------- ibis/backends/tests/test_client.py | 1 - 3 files changed, 13 insertions(+), 27 deletions(-) diff --git a/ibis/backends/pyspark/__init__.py b/ibis/backends/pyspark/__init__.py index 76a8d97fbbf5..9d1aafa8421d 100644 --- a/ibis/backends/pyspark/__init__.py +++ b/ibis/backends/pyspark/__init__.py @@ -507,6 +507,19 @@ def drop_table_or_view( statement = DropTable(name, database=database, must_exist=not force) self.raw_sql(statement.compile()) + def rename_table(self, old_name: str, new_name: str) -> None: + """Rename an existing table. + + Parameters + ---------- + old_name + The old name of the table. + new_name + The new name of the table. + """ + statement = ddl.RenameTable(old_name, new_name) + self.raw_sql(statement.compile()) + def truncate_table(self, name: str, database: str | None = None) -> None: """Delete all rows from an existing table. diff --git a/ibis/backends/pyspark/client.py b/ibis/backends/pyspark/client.py index 55293dde023d..acdbbc90ede7 100644 --- a/ibis/backends/pyspark/client.py +++ b/ibis/backends/pyspark/client.py @@ -122,32 +122,6 @@ def insert( statement = ddl.InsertSelect(self._qualified_name, select, overwrite=overwrite) return self._client.raw_sql(statement.compile()) - def rename(self, new_name: str) -> PySparkTable: - """Rename the table inside Spark. - - References to the old table are no longer valid. Spark does not support - moving tables across databases using `rename`. - - Parameters - ---------- - new_name - New table name - - Returns - ------- - PySparkTable - Renamed spark table - """ - new_qualified_name = self._client._fully_qualified_name( - new_name, self._database - ) - - statement = ddl.RenameTable(self.name, new_name) - self._client.raw_sql(statement.compile()) - - op = self.op().copy(name=new_qualified_name) - return type(self)(op) - def alter(self, tbl_properties: Mapping[str, str] | None = None) -> Any: """Change settings and parameters of the table. diff --git a/ibis/backends/tests/test_client.py b/ibis/backends/tests/test_client.py index 57aaef69bd98..bff5ebcd2be9 100644 --- a/ibis/backends/tests/test_client.py +++ b/ibis/backends/tests/test_client.py @@ -260,7 +260,6 @@ def test_create_temporary_table_from_schema(tmpcon, new_schema): "pandas", "polars", "postgres", - "pyspark", "snowflake", "sqlite", "trino",