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 e USE 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égio USE CATALOG em seu catálogo pai para acessar o esquema e o privilégio USE SCHEMA para acessar objetos dentro do esquema. Com os controles de acesso de tabela no nível do workspace, a concessão de USAGE no catálogo raiz concede USAGE automaticamente em todos os bancos de dados, mas USAGE 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 o USE SCHEMA no esquema e no catálogo pai das exibições e USE 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 ou ANONYMOUS FUNCTION: no Catálogo do Unity, não há nenhum conceito de um ANY FILE ou ANONYMOUS 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.