我正在为我的Databricks工作区将表从hive_metastore迁移到Unity Catalog。
我有三个数据块工作区:
- 开发
- 测试
- Prod
每个工作区都有自己的ADLSv2存储帐户。(开发、测试、生产(
目前在开发时,我使用读取表格
df = spark.table('bronze.my_table') # schema.table
这使用默认的hive_metastore,它指向相应的容器(工作区开发人员->存储帐户开发人员(。
然而,使用Unity目录。我现在似乎也必须根据我工作的工作区来指定目录。除非工作区有一个默认的统一目录。
df = spark.table('dev.bronze.my_table') # catalog.schema.table
当部署来自Dev的代码时->测试->Prod工作空间。我希望避免使用基于工作空间(dev、test、prod(的spark.table为所有笔记本电脑动态设置目录名称。在Dev中工作时,基本上"bronze.my_table"指向存储在Dev目录中的delta表数据。在Prod中,它指向存储在产品目录中的增量表数据。这可能吗?我假设我可以使用以前的hive_metastore(每个工作区一个(,并在其上构建Unity Catalog(它们相互引用并同步(。然而,Unity目录不是取代了hive_metastore吗?
有几种方法可以做到这一点:
-
在程序开始时发出
use catalog catalog_name
SQL命令,然后可以继续对目录内的模式+表使用两级命名-继续使用df = spark.table('bronze.my_table')
-
将目录名称变量合并到表名称中,例如
df = spark.table(f'{catalog_name}.bronze.my_table')
。
在所有情况下,您都需要显式地将目录名称作为命令行选项或小部件或类似的东西传递,或者尝试将工作区URL映射到环境。
但实际上,建议将表名作为配置参数传递,这样不仅可以在目录之间轻松切换,还可以在模式/数据库之间轻松切换。