Skip to content

Commit ba3f8d5

Browse files
authored
Rename TablesMigrate -> TablesMigrator and upgraded -> migrated for clarity and consistency (#1181)
- rename ViewsMigrator to ViewsSequencer for clarity - rename TableMigrate to TableMigrator - Rename 'upgrade' methods to 'migrate' for consistency
1 parent 404bdcb commit ba3f8d5

File tree

11 files changed

+83
-84
lines changed

11 files changed

+83
-84
lines changed

src/databricks/labs/ucx/cli.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from databricks.labs.ucx.hive_metastore import ExternalLocations, TablesCrawler
2525
from databricks.labs.ucx.hive_metastore.catalog_schema import CatalogSchema
2626
from databricks.labs.ucx.hive_metastore.mapping import TableMapping
27-
from databricks.labs.ucx.hive_metastore.table_migrate import TablesMigrate
27+
from databricks.labs.ucx.hive_metastore.table_migrate import TablesMigrator
2828
from databricks.labs.ucx.hive_metastore.table_move import TableMove
2929
from databricks.labs.ucx.install import WorkspaceInstallation
3030
from databricks.labs.ucx.installer.workflows import WorkflowsInstallation
@@ -205,7 +205,7 @@ def revert_migrated_tables(
205205
question = "You haven't specified a schema or a table. All migrated tables will be reverted. Continue?"
206206
if not prompts.confirm(question, max_attempts=2):
207207
return
208-
tables_migrate = TablesMigrate.for_cli(w)
208+
tables_migrate = TablesMigrator.for_cli(w)
209209
revert = tables_migrate.print_revert_report(delete_managed=delete_managed)
210210
if revert and prompts.confirm("Would you like to continue?", max_attempts=2):
211211
tables_migrate.revert_migrated_tables(schema, table, delete_managed=delete_managed)

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def get_tables_to_migrate(self, tables_crawler: TablesCrawler) -> Collection[Tab
133133
logger.info(f"Table {rule.as_hms_table_key} is in a database that was marked to be skipped")
134134
continue
135135
if crawled_tables_keys[rule.as_hms_table_key].is_databricks_dataset:
136-
logger.info(f"Table {rule.as_hms_table_key} is a db demo dataset and will not be upgraded")
136+
logger.info(f"Table {rule.as_hms_table_key} is a db demo dataset and will not be migrated")
137137
continue
138138
tasks.append(
139139
partial(self._get_table_in_scope_task, TableToMigrate(crawled_tables_keys[rule.as_hms_table_key], rule))
@@ -177,8 +177,8 @@ def _get_table_in_scope_task(self, table_to_migrate: TableToMigrate) -> TableToM
177177
logger.info(f"{table.key} is set as upgraded to {value['value']}")
178178
if self.exists_in_uc(table, value["value"]):
179179
logger.info(
180-
f"The table {table.key} was previously upgraded to {value['value']}. "
181-
f"To revert the table and allow it to be upgraded again use the CLI command:"
180+
f"The table {table.key} was previously migrated to {value['value']}. "
181+
f"To revert the table and allow it to be migrated again use the CLI command:"
182182
f"databricks labs ucx revert --schema {table.database} --table {table.name}"
183183
)
184184
return None

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

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def destination(self):
4242
return f"{self.dst_catalog}.{self.dst_schema}.{self.dst_table}".lower()
4343

4444

45-
class TablesMigrate:
45+
class TablesMigrator:
4646
def __init__(
4747
self,
4848
table_crawler: TablesCrawler,
@@ -99,8 +99,8 @@ def migrate_tables(self, *, what: What | None = None, acl_strategy: list[AclMigr
9999
Threads.strict("migrate tables", tasks)
100100

101101
def _migrate_table(self, src_table: Table, rule: Rule, grants: list[Grant] | None = None):
102-
if self._table_already_upgraded(rule.as_uc_table_key):
103-
logger.info(f"Table {src_table.key} already upgraded to {rule.as_uc_table_key}")
102+
if self._table_already_migrated(rule.as_uc_table_key):
103+
logger.info(f"Table {src_table.key} already migrated to {rule.as_uc_table_key}")
104104
return True
105105
if src_table.what == What.DBFS_ROOT_DELTA:
106106
return self._migrate_dbfs_root_table(src_table, rule, grants)
@@ -155,13 +155,13 @@ def _migrate_acl(self, src: Table, rule: Rule, grants: list[Grant] | None):
155155
self._backend.execute(acl_migrate_sql)
156156
return True
157157

158-
def _table_already_upgraded(self, target) -> bool:
158+
def _table_already_migrated(self, target) -> bool:
159159
return target in self._seen_tables
160160

161161
def _get_tables_to_revert(self, schema: str | None = None, table: str | None = None) -> list[Table]:
162162
schema = schema.lower() if schema else None
163163
table = table.lower() if table else None
164-
upgraded_tables = []
164+
migrated_tables = []
165165
if table and not schema:
166166
logger.error("Cannot accept 'Table' parameter without 'Schema' parameter")
167167

@@ -171,24 +171,24 @@ def _get_tables_to_revert(self, schema: str | None = None, table: str | None = N
171171
if table and cur_table.name != table:
172172
continue
173173
if cur_table.key in self._seen_tables.values():
174-
upgraded_tables.append(cur_table)
175-
return upgraded_tables
174+
migrated_tables.append(cur_table)
175+
return migrated_tables
176176

177177
def revert_migrated_tables(
178178
self, schema: str | None = None, table: str | None = None, *, delete_managed: bool = False
179179
):
180180
self._init_seen_tables()
181-
upgraded_tables = self._get_tables_to_revert(schema=schema, table=table)
181+
migrated_tables = self._get_tables_to_revert(schema=schema, table=table)
182182
# reverses the _seen_tables dictionary to key by the source table
183183
reverse_seen = {v: k for (k, v) in self._seen_tables.items()}
184184
tasks = []
185-
for upgraded_table in upgraded_tables:
186-
if upgraded_table.kind == "VIEW" or upgraded_table.object_type == "EXTERNAL" or delete_managed:
187-
tasks.append(partial(self._revert_migrated_table, upgraded_table, reverse_seen[upgraded_table.key]))
185+
for migrated_table in migrated_tables:
186+
if migrated_table.kind == "VIEW" or migrated_table.object_type == "EXTERNAL" or delete_managed:
187+
tasks.append(partial(self._revert_migrated_table, migrated_table, reverse_seen[migrated_table.key]))
188188
continue
189189
logger.info(
190-
f"Skipping {upgraded_table.object_type} Table {upgraded_table.database}.{upgraded_table.name} "
191-
f"upgraded_to {upgraded_table.upgraded_to}"
190+
f"Skipping {migrated_table.object_type} Table {migrated_table.database}.{migrated_table.name} "
191+
f"upgraded_to {migrated_table.upgraded_to}"
192192
)
193193
Threads.strict("revert migrated tables", tasks)
194194

@@ -201,10 +201,10 @@ def _revert_migrated_table(self, table: Table, target_table_key: str):
201201

202202
def _get_revert_count(self, schema: str | None = None, table: str | None = None) -> list[MigrationCount]:
203203
self._init_seen_tables()
204-
upgraded_tables = self._get_tables_to_revert(schema=schema, table=table)
204+
migrated_tables = self._get_tables_to_revert(schema=schema, table=table)
205205

206206
table_by_database = defaultdict(list)
207-
for cur_table in upgraded_tables:
207+
for cur_table in migrated_tables:
208208
table_by_database[cur_table.database].append(cur_table)
209209

210210
migration_list = []
@@ -217,8 +217,8 @@ def _get_revert_count(self, schema: str | None = None, table: str | None = None)
217217
migration_list.append(MigrationCount(database=cur_database, what_count=what_count))
218218
return migration_list
219219

220-
def is_upgraded(self, schema: str, table: str) -> bool:
221-
return self._migration_status_refresher.is_upgraded(schema, table)
220+
def is_migrated(self, schema: str, table: str) -> bool:
221+
return self._migration_status_refresher.is_migrated(schema, table)
222222

223223
def print_revert_report(self, *, delete_managed: bool) -> bool | None:
224224
migrated_count = self._get_revert_count()
@@ -280,7 +280,7 @@ class MigrationIndex:
280280
def __init__(self, tables: list[MigrationStatus]):
281281
self._index = {(ms.src_schema, ms.src_table): ms for ms in tables}
282282

283-
def is_upgraded(self, schema: str, table: str) -> bool:
283+
def is_migrated(self, schema: str, table: str) -> bool:
284284
"""Check if a table is migrated."""
285285
return self.get(schema, table) is not None
286286

@@ -318,13 +318,13 @@ def get_seen_tables(self) -> dict[str, str]:
318318
seen_tables[table.full_name.lower()] = table.properties["upgraded_from"].lower()
319319
return seen_tables
320320

321-
def is_upgraded(self, schema: str, table: str) -> bool:
321+
def is_migrated(self, schema: str, table: str) -> bool:
322322
result = self._backend.fetch(f"SHOW TBLPROPERTIES {escape_sql_identifier(schema + '.' + table)}")
323323
for value in result:
324324
if value["key"] == "upgraded_to":
325-
logger.info(f"{schema}.{table} is set as upgraded")
325+
logger.info(f"{schema}.{table} is set as migrated")
326326
return True
327-
logger.info(f"{schema}.{table} is set as not upgraded")
327+
logger.info(f"{schema}.{table} is set as not migrated")
328328
return False
329329

330330
def _crawl(self) -> Iterable[MigrationStatus]:
@@ -339,7 +339,7 @@ def _crawl(self) -> Iterable[MigrationStatus]:
339339
src_table=src_table,
340340
update_ts=str(timestamp),
341341
)
342-
if table.key in reverse_seen and self.is_upgraded(src_schema, src_table):
342+
if table.key in reverse_seen and self.is_migrated(src_schema, src_table):
343343
target_table = reverse_seen[table.key]
344344
if len(target_table.split(".")) == 3:
345345
table_migration_status.dst_catalog = target_table.split(".")[0]

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class Table:
4141

4242
location: str | None = None
4343
view_text: str | None = None
44+
# really means migrated_to
4445
upgraded_to: str | None = None
4546

4647
storage_properties: str | None = None

src/databricks/labs/ucx/hive_metastore/views_migrator.py renamed to src/databricks/labs/ucx/hive_metastore/views_sequencer.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from sqlglot.expressions import Expression as SqlExpression
44
from sqlglot.expressions import Table as SqlTable
55

6-
from databricks.labs.ucx.hive_metastore import TablesCrawler
76
from databricks.labs.ucx.hive_metastore.tables import Table
87

98

@@ -73,10 +72,10 @@ def __hash__(self):
7372
return hash(self._view)
7473

7574

76-
class ViewsMigrator:
75+
class ViewsSequencer:
7776

78-
def __init__(self, crawler: TablesCrawler):
79-
self._crawler = crawler
77+
def __init__(self, tables: list[Table]):
78+
self._tables = tables
8079
self._result_view_list: list[ViewToMigrate] = []
8180
self._result_tables_set: set[Table] = set()
8281

@@ -89,10 +88,9 @@ def sequence(self) -> list[Table]:
8988
# if none, then it's safe to add that view to the next batch of views
9089
# the complexity for a given set of views v and a dependency depth d looks like Ov^d
9190
# this seems enormous but in practice d remains small and v decreases rapidly
92-
table_list = self._crawler.snapshot()
9391
all_tables = {}
9492
views = set()
95-
for table in table_list:
93+
for table in self._tables:
9694
all_tables[table.key] = table
9795
if table.view_text is None:
9896
continue

src/databricks/labs/ucx/queries/assessment/estimates/03_0_data_migration.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
Once you have defined your data model in UC and that you've created appropriate Storage Credentials and External Locations,
55
you can then migrate your data to UC
66

7-
Assumptions for a single table upgrade estimates:
7+
Assumptions for a single table migration estimates:
88

99
- UC Data model has been defined
1010
- Storage Credentials are in place
1111
- External Locations are in place
1212
- Target Catalogs and schemas has been defined
1313
- Grants has been defined
1414

15-
Please note that depending on the table type and their location, the upgrade effort will differ.
15+
Please note that depending on the table type and their location, the migration effort will differ.
1616
[Full guidance](https://www.databricks.com/blog/migrating-tables-hive-metastore-unity-catalog-metastore)
1717

1818
| object_type | table_format | location | estimated effort | suggestion |

src/databricks/labs/ucx/runtime.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from databricks.labs.ucx.hive_metastore.mapping import TableMapping
2424
from databricks.labs.ucx.hive_metastore.table_migrate import (
2525
MigrationStatusRefresher,
26-
TablesMigrate,
26+
TablesMigrator,
2727
)
2828
from databricks.labs.ucx.hive_metastore.table_size import TableSizeCrawler
2929
from databricks.labs.ucx.hive_metastore.tables import AclMigrationWhat, What
@@ -437,7 +437,7 @@ def migrate_external_tables_sync(
437437
table_mapping = TableMapping(install, ws, sql_backend)
438438
migration_status_refresher = MigrationStatusRefresher(ws, sql_backend, cfg.inventory_database, table_crawler)
439439
group_manager = GroupManager(sql_backend, ws, cfg.inventory_database)
440-
TablesMigrate(
440+
TablesMigrator(
441441
table_crawler, grant_crawler, ws, sql_backend, table_mapping, group_manager, migration_status_refresher
442442
).migrate_tables(what=What.EXTERNAL_SYNC, acl_strategy=[AclMigrationWhat.LEGACY_TACL])
443443

@@ -457,7 +457,7 @@ def migrate_dbfs_root_delta_tables(
457457
table_mapping = TableMapping(install, ws, sql_backend)
458458
migration_status_refresher = MigrationStatusRefresher(ws, sql_backend, cfg.inventory_database, table_crawler)
459459
group_manager = GroupManager(sql_backend, ws, cfg.inventory_database)
460-
TablesMigrate(
460+
TablesMigrator(
461461
table_crawler, grant_crawler, ws, sql_backend, table_mapping, group_manager, migration_status_refresher
462462
).migrate_tables(what=What.DBFS_ROOT_DELTA, acl_strategy=[AclMigrationWhat.LEGACY_TACL])
463463

src/databricks/labs/ucx/source_code/files.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from databricks.sdk import WorkspaceClient
55
from databricks.sdk.service.workspace import Language
66

7-
from databricks.labs.ucx.hive_metastore.table_migrate import TablesMigrate
7+
from databricks.labs.ucx.hive_metastore.table_migrate import TablesMigrator
88
from databricks.labs.ucx.source_code.languages import Languages
99

1010
logger = logging.getLogger(__name__)
@@ -19,7 +19,7 @@ def __init__(self, languages: Languages):
1919

2020
@classmethod
2121
def for_cli(cls, ws: WorkspaceClient):
22-
tables_migrate = TablesMigrate.for_cli(ws)
22+
tables_migrate = TablesMigrator.for_cli(ws)
2323
index = tables_migrate.index()
2424
languages = Languages(index)
2525
return cls(languages)

tests/integration/hive_metastore/test_migrate.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from databricks.labs.ucx.hive_metastore.mapping import Rule
1313
from databricks.labs.ucx.hive_metastore.table_migrate import (
1414
MigrationStatusRefresher,
15-
TablesMigrate,
15+
TablesMigrator,
1616
)
1717
from databricks.labs.ucx.hive_metastore.tables import AclMigrationWhat, Table
1818
from databricks.labs.ucx.workspace_access.groups import GroupManager
@@ -56,7 +56,7 @@ def test_migrate_managed_tables(ws, sql_backend, inventory_schema, make_catalog,
5656
table_mapping = StaticTableMapping(ws, sql_backend, rules=rules)
5757
group_manager = GroupManager(sql_backend, ws, inventory_schema)
5858
migration_status_refresher = MigrationStatusRefresher(ws, sql_backend, inventory_schema, table_crawler)
59-
table_migrate = TablesMigrate(
59+
table_migrate = TablesMigrator(
6060
table_crawler, grant_crawler, ws, sql_backend, table_mapping, group_manager, migration_status_refresher
6161
)
6262

@@ -117,7 +117,7 @@ def test_migrate_tables_with_cache_should_not_create_table(
117117
table_mapping = StaticTableMapping(ws, sql_backend, rules=rules)
118118
group_manager = GroupManager(sql_backend, ws, inventory_schema)
119119
migration_status_refresher = MigrationStatusRefresher(ws, sql_backend, inventory_schema, table_crawler)
120-
table_migrate = TablesMigrate(
120+
table_migrate = TablesMigrator(
121121
table_crawler, grant_crawler, ws, sql_backend, table_mapping, group_manager, migration_status_refresher
122122
)
123123

@@ -169,7 +169,7 @@ def test_migrate_external_table( # pylint: disable=too-many-locals
169169
]
170170
group_manager = GroupManager(sql_backend, ws, inventory_schema)
171171
migration_status_refresher = MigrationStatusRefresher(ws, sql_backend, inventory_schema, table_crawler)
172-
table_migrate = TablesMigrate(
172+
table_migrate = TablesMigrator(
173173
table_crawler,
174174
grant_crawler,
175175
ws,
@@ -227,7 +227,7 @@ def test_migrate_external_table_failed_sync(
227227
]
228228
group_manager = GroupManager(sql_backend, ws, inventory_schema)
229229
migration_status_refresher = MigrationStatusRefresher(ws, sql_backend, inventory_schema, table_crawler)
230-
table_migrate = TablesMigrate(
230+
table_migrate = TablesMigrator(
231231
table_crawler,
232232
grant_crawler,
233233
ws,
@@ -281,7 +281,7 @@ def test_revert_migrated_table(
281281
table_mapping = StaticTableMapping(ws, sql_backend, rules=rules)
282282
group_manager = GroupManager(sql_backend, ws, inventory_schema)
283283
migration_status_refresher = MigrationStatusRefresher(ws, sql_backend, inventory_schema, table_crawler)
284-
table_migrate = TablesMigrate(
284+
table_migrate = TablesMigrator(
285285
table_crawler, grant_crawler, ws, sql_backend, table_mapping, group_manager, migration_status_refresher
286286
)
287287
table_migrate.migrate_tables()
@@ -290,11 +290,11 @@ def test_revert_migrated_table(
290290

291291
# Checking that two of the tables were reverted and one was left intact.
292292
# The first two table belongs to schema 1 and should have not "upgraded_to" property
293-
assert not table_migrate.is_upgraded(table_to_revert.schema_name, table_to_revert.name)
293+
assert not table_migrate.is_migrated(table_to_revert.schema_name, table_to_revert.name)
294294
# The second table didn't have the "upgraded_to" property set and should remain that way.
295-
assert not table_migrate.is_upgraded(table_not_migrated.schema_name, table_not_migrated.name)
295+
assert not table_migrate.is_migrated(table_not_migrated.schema_name, table_not_migrated.name)
296296
# The third table belongs to schema2 and had the "upgraded_to" property set and should remain that way.
297-
assert table_migrate.is_upgraded(table_to_not_revert.schema_name, table_to_not_revert.name)
297+
assert table_migrate.is_migrated(table_to_not_revert.schema_name, table_to_not_revert.name)
298298

299299
target_tables_schema1 = list(sql_backend.fetch(f"SHOW TABLES IN {dst_schema1.full_name}"))
300300
assert len(target_tables_schema1) == 0
@@ -393,7 +393,7 @@ def test_mapping_reverts_table(
393393
table_mapping = StaticTableMapping(ws, sql_backend, rules=rules)
394394
migration_status_refresher = MigrationStatusRefresher(ws, sql_backend, inventory_schema, table_crawler)
395395
group_manager = GroupManager(sql_backend, ws, inventory_schema)
396-
table_migrate = TablesMigrate(
396+
table_migrate = TablesMigrator(
397397
table_crawler, grant_crawler, ws, sql_backend, table_mapping, group_manager, migration_status_refresher
398398
)
399399
table_migrate.migrate_tables()
@@ -482,7 +482,7 @@ def test_migrate_managed_tables_with_acl(
482482
table_mapping = StaticTableMapping(ws, sql_backend, rules=rules)
483483
group_manager = GroupManager(sql_backend, ws, inventory_schema)
484484
migration_status_refresher = MigrationStatusRefresher(ws, sql_backend, inventory_schema, table_crawler)
485-
table_migrate = TablesMigrate(
485+
table_migrate = TablesMigrator(
486486
table_crawler, grant_crawler, ws, sql_backend, table_mapping, group_manager, migration_status_refresher
487487
)
488488

0 commit comments

Comments
 (0)