CI / CD 与 Databricks Unity 目录

Osc*_*yhr 5 databricks databricks-unity-catalog

我正在将 Databricks 工作区的表从 hive_metastore 迁移到 Unity Catalog。

我有三个 databricks 工作区:

  • 开发者
  • 测试
  • 产品

每个工作区都有自己的 ADLSv2 存储帐户。(开发、测试、生产)

目前,在开发时,我使用以下方式读取表格

df = spark.table('bronze.my_table') # schema.table
Run Code Online (Sandbox Code Playgroud)

这使用默认的 hive_metastore 指向相应的容器(工作空间开发 -> 存储帐户开发)。

但是,使用 Unity Catalog。看来我现在也必须根据我工作的工作空间来指定目录。除非工作空间有一个默认的统一目录。

df = spark.table('dev.bronze.my_table') # catalog.schema.table
Run Code Online (Sandbox Code Playgroud)

从 Dev -> Test -> Prod 工作区部署代码时。我想避免必须使用基于工作区(开发、测试、生产)的 Spark.table 动态设置所有笔记本的目录名称。基本上,在 Dev 中工作时,“bronze.my_table”指向存储在 dev 目录中的增量表数据。在 Prod 中,它指向存储在 prod 目录中的增量表数据。这可能吗?我假设我可以使用之前的 hive_metastore(每个工作区一个)并在其上构建 Unity Catalog(它们相互引用并且同步)。然而,Unity Catalog 取代 hive_metastore 的想法不是吗?

Ale*_*Ott 2

对此有几种方法:

  1. 在程序开始时发出use catalog catalog_nameSQL命令,然后您可以继续使用目录内的schema+table的二级命名 - 继续使用df = spark.table('bronze.my_table')

  2. 将目录名称变量合并到表名称中,例如df = spark.table(f'{catalog_name}.bronze.my_table').

在所有情况下,您都需要将目录名称作为命令行选项或小部件或类似的内容显式传递,或者尝试将工作区 URL 映射到环境。

但实际上,建议将表名作为配置参数传递,这样您不仅可以在目录之间轻松切换,还可以在模式/数据库之间轻松切换。