将表和视图升级到 Unity Catalog

本文介绍如何将现有 Hive 元存储中注册的表和视图升级到 Unity Catalog。

若要确定表当前是否在 Unity Catalog 中注册,请检查目录名称。 目录 hive_metastore 中的表在 Hive 元存储中注册。 列出的任何其他目录都由 Unity Catalog 管理。

注意

Unity Catalog 管理分区的方式与 Hive 不同。 Unity Catalog 管理的表不支持直接操作分区的 Hive 命令。

将架构或多个表升级到 Unity Catalog

可以使用目录资源管理器升级向导将完整架构(数据库)和多个外部表从默认 Hive 元存储复制到 Unity Catalog 元存储。

要求

在开始之前,必须:

  • 具有一个包含服务主体相关信息的存储凭据,该服务主体经过授权,可以访问旧表的位置路径。
  • 一个外部位置,可引用刚创建的存储凭据和云租户数据的路径。
  • 对要升级的表的外部位置具有 CREATE EXTERNAL TABLE 权限。

升级过程

  1. 请单击边栏中的Catalog icon目录”以打开目录资源管理器

  2. 选择 hive_metastore 作为你的目录,然后选择要升级的架构(数据库)。

    Select database

  3. 单击架构详细信息视图右上角的“升级”。

  4. 选择要升级的所有表,然后单击“下一步”。

    只能使用升级向导升级 Unity Catalog 支持的格式外部表

  5. 为每个表设置目标目录、架构(数据库)和所有者。

    用户将能够在其对目录和架构的权限的上下文中访问新创建的表。

    表所有者对表拥有所有权限,包括 SELECTMODIFY。 如果你不选择所有者,系统会创建将你作为所有者的托管表。 Databricks 通常建议你将表所有权授予组。 若要详细了解 Unity Catalog 中的对象所有权,请参阅管理 Unity Catalog 对象所有权

    若要将相同的目录和架构分配给多个表,请选择这些表,然后单击“设置目标”按钮。

    若要将同一所有者分配给多个表,请选择这些表,然后单击“设置所有者”按钮。

  6. 检查表配置。 若要修改它们,请单击“上一步”按钮。

  7. 单击“创建查询以进行升级”。

    此时会显示一个查询编辑器,其中包含生成的 SQL 语句。

  8. 运行查询。

    查询完成后,每个表的元数据已从 Hive 元存储复制到 Unity Catalog。 这些表在升级向导中标记为“已升级”。

  9. 使用每个新表的“权限”选项卡定义精细访问控制。

  10. 修改工作负载以使用新表。

将单个外部表升级到 Unity Catalog

可以使用目录资源管理器将外部表从默认 Hive 元存储复制到 Unity Catalog 元存储。

要求

在开始之前,必须:

  • 具有一个包含服务主体或托管标识相关信息的存储凭据,该服务主体或托管标识经过授权,可以访问旧表的位置路径。
  • 一个外部位置,可引用刚创建的存储凭据和云租户数据的路径。
  • 对要升级的表的外部位置具有 CREATE EXTERNAL TABLE 权限。

升级过程

若要升级外部表,请执行以下操作:

  1. 请单击边栏中的Catalog icon目录”,以打开目录资源管理器

  2. 依次选择要升级的数据库和表。

  3. 单击表详细信息视图右上角的“升级操作”。

  4. 选择目标目录、架构(数据库)和所有者。

    用户将能够在其对目录和架构的权限的上下文中访问新创建的表。

    表所有者对表拥有所有权限,包括 SELECTMODIFY。 如果你不选择所有者,系统会创建将你作为所有者的托管表。 Databricks 通常建议你将表所有权授予组。 若要详细了解 Unity Catalog 中的对象所有权,请参阅管理 Unity Catalog 对象所有权

  5. 单击“升级”。

    表元数据现在已复制到 Unity Catalog,并已创建一个新表。 现在可以使用“权限”选项卡来定义精细的访问控制。

  6. 修改现有工作负荷以使用新表。

    注意

    如果不再需要旧表,可以从 Hive 元存储中将其删除。 删除外部表不会修改云租户上的数据文件。

将视图升级到 Unity Catalog

将视图的所有引用表升级到同一 Unity Catalog 元存储后,可以新建视图来引用新表。

将表升级为 Unity Catalog 托管表

若要将表作为托管表升级到 Unity Catalog,请执行以下操作:

  1. 查询现有表以新建 Unity Catalog 表。 替换占位符值替:

    • <catalog>:新表的 Unity Catalog 目录。
    • <new-schema>:新表的 Unity Catalog 架构。
    • <new-table>:Unity Catalog 表的名称。
    • <old-schema>:旧表的架构,例如 default
    • <old-table>:旧表的名称。

    SQL

    CREATE TABLE <catalog>.<new-schema>.<new-table>
    AS SELECT * FROM hive_metastore.<old-schema>.<old-table>;
    

    Python

    df = spark.table("hive_metastore.<old-schema>.<old-table>")
    
    df.write.saveAsTable(
      name = "<catalog>.<new-schema>.<new-table>"
    )
    

    R

    %r
    library(SparkR)
    
    df = tableToDF("hive_metastore.<old-schema>.<old-table>")
    
    saveAsTable(
      df = df,
      tableName = "<catalog>.<new-schema>.<new-table>"
    )
    

    Scala

    val df = spark.table("hive_metastore.<old-schema>.<old-table>")
    
    df.write.saveAsTable(
      tableName = "<catalog>.<new-schema>.<new-table>"
    )
    

    如果只想迁移某些列或行,请修改 SELECT 语句。

    注意

    此命令创建托管表,其中数据复制到设置元存储时指定的存储位置。 若要创建外部表(即在 Unity Catalog 中注册的且不将数据移到云存储中的表),请参阅将单个外部表升级到 Unity Catalog

  2. 授予帐户级用户或组对新表的访问权限。 请参阅在 Unity Catalog 中管理权限

  3. 迁移表后,用户应更新其现有查询和工作负载以使用新表。

  4. 在删除旧表之前,请通过撤消对它的访问权限并重新运行相关查询和工作负载来测试依赖项。