in pyiceberg/catalog/glue.py [0:0]
def rename_table(self, from_identifier: Union[str, Identifier], to_identifier: Union[str, Identifier]) -> Table:
"""Rename a fully classified table name.
This method can only rename Iceberg tables in AWS Glue.
Args:
from_identifier: Existing table identifier.
to_identifier: New table identifier.
Returns:
Table: the updated table instance with its metadata.
Raises:
ValueError: When from table identifier is invalid.
NoSuchTableError: When a table with the name does not exist.
NoSuchIcebergTableError: When from table is not a valid iceberg table.
NoSuchPropertyException: When from table miss some required properties.
NoSuchNamespaceError: When the destination namespace doesn't exist.
"""
from_database_name, from_table_name = self.identifier_to_database_and_table(from_identifier, NoSuchTableError)
to_database_name, to_table_name = self.identifier_to_database_and_table(to_identifier)
try:
get_table_response = self.glue.get_table(DatabaseName=from_database_name, Name=from_table_name)
except self.glue.exceptions.EntityNotFoundException as e:
raise NoSuchTableError(f"Table does not exist: {from_database_name}.{from_table_name}") from e
glue_table = get_table_response["Table"]
try:
# verify that from_identifier is a valid iceberg table
self._convert_glue_to_iceberg(glue_table=glue_table)
except NoSuchPropertyException as e:
raise NoSuchPropertyException(
f"Failed to rename table {from_database_name}.{from_table_name} since it is missing required properties"
) from e
except NoSuchIcebergTableError as e:
raise NoSuchIcebergTableError(
f"Failed to rename table {from_database_name}.{from_table_name} since it is not a valid iceberg table"
) from e
rename_table_input = _construct_rename_table_input(to_table_name=to_table_name, glue_table=glue_table)
self._create_glue_table(database_name=to_database_name, table_name=to_table_name, table_input=rename_table_input)
try:
self.drop_table(from_identifier)
except Exception as e:
log_message = f"Failed to drop old table {from_database_name}.{from_table_name}. "
try:
self.drop_table(to_identifier)
log_message += f"Rolled back table creation for {to_database_name}.{to_table_name}."
except NoSuchTableError:
log_message += (
f"Failed to roll back table creation for {to_database_name}.{to_table_name}. Please clean up manually"
)
raise ValueError(log_message) from e
return self.load_table(to_identifier)