与统一目录和遗留的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”))
图书馆(SparkR)sql(“使用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_sales.sales_historical在hive_metastore.销售.sales_current.order_id=主要.shared_sales.sales_historical.order_id;
dfCurrent=火花.表格(“hive_metastore.sales.sales_current”)dfHistorical=火花.表格(“main.shared_sales.sales_historical”)显示(dfCurrent.加入(其他=dfHistorical,在=dfCurrent.order_id= =dfHistorical.order_id))
图书馆(SparkR)dfCurrent=tableToDF(“hive_metastore.sales.sales_current”)dfHistorical=tableToDF(“main.shared_sales.sales_historical”)显示(加入(x=dfCurrent,y=dfHistorical,joinExpr=dfCurrent$order_id= =dfHistorical$order_id))
瓦尔dfCurrent=火花.表格(“hive_metastore.sales.sales_current”)瓦尔dfHistorical=火花.表格(“main.shared_sales.sales_historical”)显示(dfCurrent.加入(正确的=dfHistorical,joinExprs=dfCurrent(“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目录。