Skip to content

Commit f6d9841

Browse files
authored
Fixed Skip/Unskip schema functionality (#3567)
Closes #3494
1 parent c3ad142 commit f6d9841

File tree

3 files changed

+11
-8
lines changed

3 files changed

+11
-8
lines changed

src/databricks/labs/ucx/hive_metastore/mapping.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def skip_schema(self, schema: str):
172172
# Marks a schema to be skipped in the migration process by applying a table property
173173
try:
174174
self._sql_backend.execute(
175-
f"ALTER SCHEMA {escape_sql_identifier(schema)} SET DBPROPERTIES('{self.UCX_SKIP_PROPERTY}' = true)"
175+
f"ALTER SCHEMA hive_metastore.{escape_sql_identifier(schema)} SET DBPROPERTIES('{self.UCX_SKIP_PROPERTY}' = true)"
176176
)
177177
except NotFound as err:
178178
if "[SCHEMA_NOT_FOUND]" in str(err):
@@ -190,7 +190,7 @@ def unskip_schema(self, schema: str) -> None:
190190
"""
191191
try:
192192
self._sql_backend.execute(
193-
f"ALTER SCHEMA hive_metastore.{escape_sql_identifier(schema)} UNSET DBPROPERTIES IF EXISTS('{self.UCX_SKIP_PROPERTY}');"
193+
f"ALTER SCHEMA hive_metastore.{escape_sql_identifier(schema)} SET DBPROPERTIES('{self.UCX_SKIP_PROPERTY}' = false);"
194194
)
195195
except (NotFound, BadRequest) as e:
196196
logger.error(f"Failed to remove skip marker from schema: {schema}.", exc_info=e)
@@ -251,7 +251,8 @@ def _get_database_in_scope_task(self, database: str) -> str | None:
251251
properties = describe.get("Properties", "")
252252
if not properties:
253253
return database
254-
if self.UCX_SKIP_PROPERTY in TablesCrawler.parse_database_props(properties.lower()):
254+
tbl_props = TablesCrawler.parse_database_props(properties.lower())
255+
if tbl_props.get(self.UCX_SKIP_PROPERTY, "false") == "true":
255256
logger.info(f"Database {database} is marked to be skipped")
256257
return None
257258
return database
@@ -268,7 +269,7 @@ def _get_table_in_scope_task(self, table_to_migrate: TableToMigrate, check_uc_ta
268269
return None
269270

270271
for value in properties:
271-
if value["key"] == self.UCX_SKIP_PROPERTY:
272+
if value["key"] == self.UCX_SKIP_PROPERTY and value["value"] == "true":
272273
logger.info(f"{table.key} is marked to be skipped")
273274
return None
274275
if value["key"] == "upgraded_to":

tests/unit/hive_metastore/test_mapping.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,9 @@ def test_skip_happy_path(caplog):
220220
)
221221
assert len(caplog.records) == 0
222222
mapping.skip_schema(schema="schema")
223-
sbe.execute.assert_called_with(f"ALTER SCHEMA `schema` SET DBPROPERTIES('{mapping.UCX_SKIP_PROPERTY}' = true)")
223+
sbe.execute.assert_called_with(
224+
f"ALTER SCHEMA hive_metastore.`schema` SET DBPROPERTIES('{mapping.UCX_SKIP_PROPERTY}' = true)"
225+
)
224226
assert len(caplog.records) == 0
225227

226228

@@ -262,7 +264,7 @@ def test_unskip_on_schema() -> None:
262264
mapping.unskip_schema(schema="schema")
263265
ws.tables.get.assert_not_called()
264266
assert (
265-
f"ALTER SCHEMA hive_metastore.`schema` UNSET DBPROPERTIES IF EXISTS('{mapping.UCX_SKIP_PROPERTY}');"
267+
f"ALTER SCHEMA hive_metastore.`schema` SET DBPROPERTIES('{mapping.UCX_SKIP_PROPERTY}' = false);"
266268
in mock_backend.queries
267269
)
268270

tests/unit/test_cli.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ def test_skip_with_schema(ws) -> None:
204204

205205
ws.statement_execution.execute_statement.assert_called_with(
206206
warehouse_id='test',
207-
statement="ALTER SCHEMA `schema` SET DBPROPERTIES('databricks.labs.ucx.skip' = true)",
207+
statement="ALTER SCHEMA hive_metastore.`schema` SET DBPROPERTIES('databricks.labs.ucx.skip' = true)",
208208
byte_limit=None,
209209
catalog=None,
210210
schema=None,
@@ -261,7 +261,7 @@ def test_unskip_with_schema(ws) -> None:
261261

262262
ws.statement_execution.execute_statement.assert_called_with(
263263
warehouse_id='test',
264-
statement="ALTER SCHEMA hive_metastore.`schema` UNSET DBPROPERTIES IF EXISTS('databricks.labs.ucx.skip');",
264+
statement="ALTER SCHEMA hive_metastore.`schema` SET DBPROPERTIES('databricks.labs.ucx.skip' = false);",
265265
byte_limit=None,
266266
catalog=None,
267267
schema=None,

0 commit comments

Comments
 (0)