Compartilhar via


Trabalhar com o metastore do Hive legado junto com o Catálogo do Unity

Este artigo explica uma abordagem para continuar a usar o metastore do Hive por workspace herdado quando seu workspace do Azure Databricks estiver habilitado para o Catálogo do Unity.

Se o seu workspace estava em serviço antes de ser habilitado para o Catálogo Unity (Unity Catalog), ele provavelmente possui um metastore Hive contendo dados que você pode querer continuar a usar. Este artigo descreve como continuar a trabalhar com tabelas registradas em um metastore do Hive.

Importante

O metastore do Hive por workspace é um recurso herdado e as instruções fornecidas neste artigo representam fluxos de trabalho herdados.

As tabelas no metastore do Hive não se beneficiam do conjunto completo de recursos de segurança e governança fornecidos pelo Catálogo do Unity, como auditoria interna, linhagem e controle de acesso. O Databricks recomenda migrar essas tabelas e as cargas de trabalho que as fazem referência ao Catálogo do Unity e desabilitar o acesso direto ao metastore do Hive.

Dois caminhos de migração estão disponíveis:

  • Atualize todas as tabelas registradas no metastore do Hive no Unity Catalog.

  • Federar seu metastore do Hive para o Catálogo do Unity usando a federação do metastore do Hive para uma abordagem mais gradual. A federação do metastore do Hive cria um catálogo estrangeiro no Catálogo do Unity que espelha o metastore do Hive.

Consulte Atualizar um espaço de trabalho do Azure Databricks para o Catálogo do Unity.

Consultar o metastore do Hive legado 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;

Pitão

display(spark.table("hive_metastore.sales.sales_raw"))

R

library(SparkR)

display(tableToDF("hive_metastore.sales.sales_raw"))

Scala (linguagem de programação)

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;

Pitão

spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))

R

library(SparkR)

sql("USE hive_metastore.sales")
display(tableToDF("sales_raw"))

Scala (linguagem de programação)

spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))

Controle de acesso no Unity Catalog em comparação com o metastore Hive legado

Se você configurou o controle de acesso à tabela herdada no metastore do Hive, o Databricks continuará a impor esses controles de acesso aos dados no hive_metastore catálogo para clusters em execução no modo de acesso padrão.

O modelo de acesso do Catálogo do Unity difere ligeiramente dos controles de acesso herdados:

  • Metastore: o Catálogo do Unity é um objeto no nível da conta e 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.
  • Grupos de contas: As políticas de controle de acesso no Catálogo do Unity são aplicadas aos grupos de contas, enquanto as políticas de controle de acesso para o metastore do Hive são aplicadas aos grupos locais do workspace. Consulte fontes de grupo.
  • USE CATALOG e USE SCHEMA permissões 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 um usuário em uma tabela, o usuário também deve ter o USE CATALOG privilégio no catálogo pai para acessar o esquema e o USE SCHEMA privilégio 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 tabelas e exibições referenciadas da exibição. Ter o SELECT privilégio é suficiente, juntamente com USE SCHEMA no esquema pai das exibições e USE CATALOG no catálogo pai. Com controles de acesso à tabela no nível do espaço de trabalho, o proprietário de uma visualização precisa ser proprietário de todas as tabelas e visualizações referenciadas.
  • pt-BR: Sem suporte para ANY FILE ou ANONYMOUS FUNCTION: no Catálogo do Unity, não existe o conceito de um ANY FILE ou ANONYMOUS FUNCTION protegível que possa permitir que um usuário sem privilégios execute código privilegiado.
  • Sem suporte para DENY: o modelo de privilégio do Catálogo do Unity é baseado no princípio do privilégio mínimo. Privilégios que não são concedidos são negados implicitamente.
  • 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 do Hive herdado só funcionará no workspace onde 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;

Pitão

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 (linguagem de programação)

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 espaço de trabalho foi habilitado para o Unity Catalog automaticamente, o catálogo do espaço de trabalho 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, fará sentido usar hive_metastore como catálogo padrão para evitar afetar o código existente que faz referência ao metastore de hive, a menos que você tenha migrado totalmente do 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.

Veja Conectar-se ao Azure Data Lake Storage e ao Armazenamento de Blobs.