Trabalhar com o Catálogo do Unity e o metastore herdado do Hive
Este artigo explica como usar o metastore do Hive por espaço de trabalho quando seu Workspace do Azure Databricks estiver habilitado para o Catálogo do Unity.
Se o workspace estava em serviço antes de ser habilitado para o Catálogo do Unity, ele provavelmente tem um metastore do Hive que contém dados que serão interessantes para você usar. O Databricks recomenda migrar as tabelas gerenciadas pelo metastore do Hive para o metastore do Catálogo do Unity, mas se você optar por não fazer isso, este artigo explica como trabalhar com os dados gerenciados por ambos os metastores.
Consultar o metastore do Hive no Catálogo do Unity
O metastore do Catálogo do Unity é aditivo, o que significa que ele pode ser usado com o metastore do Hive por workspace no Azure Databricks. O metastore do Hive é exibido como um catálogo de nível superior chamado hive_metastore
no namespace de três níveis.
Por exemplo, você pode consultar uma tabela chamada sales_raw
no esquema sales
no metastore herdado do Hive usando a seguinte notação:
SQL
SELECT * from hive_metastore.sales.sales_raw;
Python
display(spark.table("hive_metastore.sales.sales_raw"))
R
library(SparkR)
display(tableToDF("hive_metastore.sales.sales_raw"))
Scala
display(spark.table("hive_metastore.sales.sales_raw"))
Você também pode especificar o catálogo e o esquema com uma instrução USE
:
SQL
USE hive_metastore.sales;
SELECT * from sales_raw;
Python
spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))
R
library(SparkR)
sql("USE hive_metastore.sales")
display(tableToDF("sales_raw"))
Scala
spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))
Controle de acesso no Catálogo do Unity e no metastore do Hive
Se você configurou o controle de acesso à tabela no metastore do Hive, o Databricks continuará a impor esses controles de acesso para dados no catálogo hive_metastore
em clusters executados no modo de acesso compartilhado. O modelo de acesso do Catálogo do Unity difere ligeiramente dos controles de acesso herdados, como em relação à ausência de instruções DENY
. O metastore do Hive é um objeto no nível do workspace. As permissões definidas no catálogo hive_metastore
sempre se referem aos usuários e aos grupos locais no workspace. Confira Diferenças do controle de acesso à tabela.
Diferenças do controle de acesso à tabela
O Catálogo do Unity tem as importantes diferenças a seguir em relação ao uso de controles de acesso à tabela no metastore herdado do Hive em cada workspace.
O modelo de controle de acesso no Catálogo do Unity tem as seguintes diferenças em relação ao controle de acesso à tabela:
- Grupos de contas: as políticas de controle de acesso no Catálogo do Unity são aplicadas grupos de contas, enquanto as políticas de controle de acesso para o metastore do Hive são aplicadas a grupos locais do workspace. Confira Diferença entre os grupos de contas e os grupos locais de workspace.
- As permissões
USE CATALOG
eUSE SCHEMA
são necessárias no catálogo e no esquema para todas as operações em objetos dentro do catálogo ou esquema: independentemente dos privilégios de uma entidade de segurança em uma tabela, a entidade de segurança também deve ter o privilégioUSE CATALOG
em seu catálogo pai para acessar o esquema e o privilégioUSE SCHEMA
para acessar objetos dentro do esquema. Com os controles de acesso de tabela no nível do workspace, a concessão deUSAGE
no catálogo raiz concedeUSAGE
automaticamente em todos os bancos de dados, masUSAGE
no catálogo raiz não é necessário. - Exibições: no Catálogo do Unity, o proprietário de uma exibição não precisa ser um proprietário das exibições e das tabelas referenciadas da exibição. Ter o privilégio
SELECT
é suficiente, junto com oUSE SCHEMA
no esquema e no catálogo pai das exibições eUSE CATALOG
no catálogo pai. Com os controles de acesso à tabela de nível do workspace, o proprietário de uma exibição precisa ser proprietário de todas as exibições e tabelas referenciadas. - Sem suporte para
ANY FILE
ouANONYMOUS FUNCTION
: no Catálogo do Unity, não há nenhum conceito de umANY FILE
ouANONYMOUS FUNCTION
protegível que possa permitir que um usuário sem privilégios para executar código privilegiado. - Sem privilégios
READ_METADATA
: o Catálogo do Unity gerencia o acesso para exibir metadados de uma maneira diferente. Confira Privilégios e objetos protegíveis do Catálogo do Unity.
Junções entre objetos do metastore do Hive e o Catálogo do Unity
Usando a notação de namespace de três níveis, você pode unir os dados de um metastore do Catálogo do Unity aos dados do metastore herdado do Hive.
Observação
Uma junção com os dados do metastore herdado do Hive só funcionará no workspace em que esses dados estão. Se você tentar executar essa junção em outro workspace, isso resultará em um erro. O Azure Databricks recomenda que você atualize tabelas e exibições herdadas para o Catálogo do Unity.
O exemplo a seguir une os resultados da tabela sales_current
do metastore herdado do Hive à tabela sales_historical
do metastore do Catálogo do Unity quando os campos order_id
são iguais.
SQL
SELECT * FROM hive_metastore.sales.sales_current
JOIN main.shared_sales.sales_historical
ON hive_metastore.sales.sales_current.order_id = main.shared_sales.sales_historical.order_id;
Python
dfCurrent = spark.table("hive_metastore.sales.sales_current")
dfHistorical = spark.table("main.shared_sales.sales_historical")
display(dfCurrent.join(
other = dfHistorical,
on = dfCurrent.order_id == dfHistorical.order_id
))
R
library(SparkR)
dfCurrent = tableToDF("hive_metastore.sales.sales_current")
dfHistorical = tableToDF("main.shared_sales.sales_historical")
display(join(
x = dfCurrent,
y = dfHistorical,
joinExpr = dfCurrent$order_id == dfHistorical$order_id))
Scala
val dfCurrent = spark.table("hive_metastore.sales.sales_current")
val dfHistorical = spark.table("main.shared_sales.sales_historical")
display(dfCurrent.join(
right = dfHistorical,
joinExprs = dfCurrent("order_id") === dfHistorical("order_id")
))
Catálogo padrão
Um catálogo padrão é configurado para cada espaço de trabalho habilitado para o Catálogo do Unity.
Se você omitir o nome do catálogo de nível superior ao executar operações de dados, o catálogo padrão será assumido.
O catálogo padrão que foi inicialmente configurado para seu workspace depende de como seu workspace foi habilitado para o Catálogo do Unity:
- Se seu workspace foi habilitado para o Catálogo do Unity automaticamente, o catálogo do workspace foi definido como o catálogo padrão. Confira Habilitação automática do Catálogo do Unity.
- Se o workspace foi habilitado para o Catálogo do Unity manualmente, o catálogo
hive_metastore
foi definido como o catálogo padrão.
Se você estiver fazendo a transição do metastore do Hive para o Catálogo do Unity em um workspace existente, normalmente faz sentido usar hive_metastore
como o catálogo padrão para evitar afetar o código existente que faz referência ao metastore do Hive.
Para saber como obter e alternar o catálogo padrão, confira Gerenciar o catálogo padrão
Permissões de acesso a dados com escopo de cluster
Quando você usa o metastore do Hive junto com o Catálogo do Unity, as credenciais de acesso a dados associadas ao cluster são usadas para acessar os dados do metastore do Hive, mas não os dados registrados no Catálogo do Unity.
Se os usuários acessarem caminhos que estão fora do Catálogo do Unity (como um caminho não registrado como uma tabela ou local externo), as credenciais de acesso atribuídas ao cluster serão usadas.
Consulte Conectar-se ao Azure Data Lake Storage Gen2 e ao Armazenamento de Blobs.
Atualizar as tabelas herdadas para o Catálogo do Unity
As tabelas do metastore do Hive não se beneficiam do conjunto completo de recursos de segurança e governança apresentados pelo Catálogo do Unity, como auditoria e controle de acesso internos. O Databricks recomenda que você atualize suas tabelas herdadas adicionando-as ao Catálogo do Unity.