与统一目录和遗留的Hive metastore工作

这篇文章解释了如何在Databricks中使用每个工作区的Hive metastore来使用Unity Catalog metastore。

如果您的工作空间在为Unity Catalog启用之前处于服务状态,那么它可能有一个Hive metastore,其中包含您希望继续使用的数据。Databricks建议您将Hive metastore管理的表迁移到Unity Catalog metastore,但如果您选择不这样做,本文将解释如何处理由两个亚metastore管理的数据。

在Unity Catalog中查询Hive metastore

Unity Catalog metastore是可添加的,这意味着它可以与Databricks中的每个工作空间Hive metastore一起使用。Hive metastore显示为一个顶级目录,名为hive_metastore在三级命名空间中。

例如,可以引用一个名为sales_raw销售通过使用以下符号,在遗留的Hive metastore中创建架构:

选择hive_metastore销售sales_raw
显示火花表格“hive_metastore.sales.sales_raw”))
图书馆SparkR显示tableToDF“hive_metastore.sales.sales_raw”))
显示火花表格“hive_metastore.sales.sales_raw”))

类型还可以指定编目和模式使用声明:

使用hive_metastore销售选择sales_raw
火花sql“使用hive_metastore.sales”显示火花表格“sales_raw”))
图书馆SparkRsql“使用hive_metastore.sales”显示tableToDF“sales_raw”))
火花sql“使用hive_metastore.sales”显示火花表格“sales_raw”))

Unity Catalog和Hive metastore中的访问控制

如果你配置了表访问控制在Hive metastore上,Databricks继续对数据进行访问控制hive_metastore以共享访问模式运行的集群的目录。Unity Catalog访问模型与传统访问控制略有不同,比如no否认语句。Hive metastore是一个工作空间级对象。定义在hive_metastore目录始终引用工作区中的本地用户和组。看到与表访问控制的区别

与表访问控制的区别

Unity Catalog与使用有以下主要区别表访问控制在每个工作空间的遗留Hive metastore中。

Unity Catalog中的访问控制模型与表访问控制有以下区别:

  • 账户组: Unity Catalog中的访问控制策略应用于帐户组,Hive metastore中的访问控制策略应用于工作空间-本地组。看到团体特别注意事项

  • 使用目录而且使用模式编目和模式上对编目或模式内对象的所有操作都需要权限:无论主体在表上的权限如何,主体也必须具有使用目录类的模式和使用模式访问模式内对象的特权。使用工作区级别的表访问控制,授予使用在根目录上自动授予使用在所有数据库上,但是使用在根目录上不需要。

  • 的观点:在Unity Catalog中,视图的所有者不需要是视图引用表和视图的所有者。有选择特权就足够了,连同使用模式视图的父模式和使用目录在父目录上。使用工作空间级别的表访问控制,视图的所有者需要是所有引用的表和视图的所有者。

  • 不支持所有文件匿名函数年代在Unity Catalog中,没有所有文件匿名函数许可。通过允许非特权用户运行特权代码,可以使用这些权限规避访问控制限制。

Unity Catalog和Hive metastore对象之间的连接

通过使用三级命名空间符号,您可以将Unity Catalog亚metastore中的数据与遗留Hive亚metastore中的数据连接起来。

请注意

与遗留Hive metastore中的数据的连接将只在该数据所在的工作空间上工作。试图在另一个工作区中运行这样的连接会导致错误。Databricks建议您升级遗留表和视图到Unity目录。

方法的结果进行连接sales_current表中遗留的Hive metastore与sales_historical表在统一目录亚metastore时order_id字段是平等的。

选择hive_metastore销售sales_current加入主要shared_salessales_historicalhive_metastore销售sales_currentorder_id主要shared_salessales_historicalorder_id
dfCurrent火花表格“hive_metastore.sales.sales_current”dfHistorical火花表格“main.shared_sales.sales_historical”显示dfCurrent加入其他dfHistoricaldfCurrentorder_id= =dfHistoricalorder_id))
图书馆SparkRdfCurrenttableToDF“hive_metastore.sales.sales_current”dfHistoricaltableToDF“main.shared_sales.sales_historical”显示加入xdfCurrentydfHistoricaljoinExprdfCurrentorder_id= =dfHistoricalorder_id))
瓦尔dfCurrent火花表格“hive_metastore.sales.sales_current”瓦尔dfHistorical火花表格“main.shared_sales.sales_historical”显示dfCurrent加入正确的dfHistoricaljoinExprsdfCurrent“order_id”= = =dfHistorical“order_id”))

默认目录

如果在执行数据操作时省略顶级编目名称,则没有使用目录语句,则假定为默认目录。当然,如果您以另一种方式提供编目名称,例如在JDBC字符串上设置它,那么当您在数据操作中省略编目名称时,将假定该编目而不是默认编目。

缺省情况下,默认目录为hive_metastore.若要为工作空间配置不同的默认目录,可以设置Spark配置或运行砖CLI命令:

设置spark.databricks.sql.initial.catalog.name价值。

这个CLI命令仅更新SQL仓库的默认目录。要为集群指定默认目录,请使用Spark配置。

Databricks单位目录亚metastores分配——workspace-id1234567890123456——metastore-id 12 a345b6张cd - 7890 - 1 - 3456 e789f0a12b34——default-catalog-name my_catalog

如果你的Databricks工作空间在为Unity Catalog启用工作空间之前使用了每个工作空间的Hive metastore, Databricks建议你保持默认的Catalog值为hive_metastore这样你现有的代码就可以操作当前的Hive metastore数据而不需要任何改变。

警告

更改默认目录可能会破坏依赖于它的现有数据操作。

集群实例概要文件

当Hive metastore与Unity Catalog一起使用时,集群上的实例配置文件用于访问Hive metastore数据,而不是在Unity Catalog中注册的数据。

如果用户访问的路径在Unity Catalog之外(例如没有注册为表或外部位置的路径),则使用集群上的实例配置文件。

将遗留表升级到Unity Catalog

Hive metastore中的表并不能从Unity Catalog引入的完整的安全和治理特性中获益,比如内置的审计和访问控制。Databricks建议您升级遗留表通过将它们添加到Unity目录。