Partilhar via


Trabalhe com o Unity Catalog e o antigo metastore do Hive

Este artigo explica uma abordagem para continuar a utilizar o metastore do Hive por cada espaço de trabalho quando o seu espaço de trabalho do Azure Databricks está habilitado para o Unity Catalog.

Se seu espaço de trabalho estava em serviço antes de ser habilitado para o Unity Catalog, ele provavelmente tem um metastore Hive interno que contém dados que você deseja continuar a usar. O Databricks recomenda que você use de federação do Hive Metastore para criar um catalog federado no Unity Catalog que espelhe o metastore do Hive e, eventualmente, migrar todas as cargas de trabalho herdadas para usar esse catalogfederado. No entanto, se você ainda não iniciou o processo de federação do metastore do Hive, pode usar este artigo para aprender a trabalhar com dados registrados em seu metastore herdado do Hive juntamente com seus dados registrados no Unity Catalog.

Consultar o metastore do Hive no Unity Catalog

O metastore do Unity Catalog é aditivo, o que significa que pode ser usado com o metastore Hive por espaço de trabalho no Azure Databricks. O metastore do Hive aparece como um catalog de nível superior chamado hive_metastore no namespace de três níveis.

Por exemplo, é possível fazer referência a um table chamado sales_raw no salesschema 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 catalog e schema 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 Unity Catalog e no metastore do Hive

Se você configurou de controle de acesso table herdado no metastore do Hive, o Databricks continuará a impor esses controles de acesso para dados no hive_metastorecatalog para clusters em execução no modo de acesso compartilhado. O modelo de acesso Unity Catalog difere ligeiramente dos controlos de acesso herdados, uma vez que não há instruções DENY. O metastore do Hive é um objeto no nível do espaço de trabalho. As permissões definidas no hive_metastorecatalog sempre se referem aos usuários e grupos locais no espaço de trabalho. Consulte O modelo de privilégios do Unity Catalog comparado aode controle de acesso table legado.

O modelo de privilégios de Catalog Unity em comparação com o controle de acesso table legado

O modelo de controle de acesso no Unity difere das seguintes maneiras do de controle de acesso no metastore herdado do Hive:

  • Grupos de contas: As políticas de controle de acesso no Unity Catalog são aplicadas a grupos de contas, enquanto as políticas de controle de acesso para o metastore do Hive são aplicadas a grupos locais de espaço de trabalho. Consulte Tipos de grupos no Azure Databricks.
  • USE CATALOG e USE SCHEMA permissões são necessárias no catalog e schema para todas as operações em objetos dentro do catalog ou schema: Independentemente dos privilégios de um principal num table, o principal também deve ter o privilégio USE CATALOG no seu catalog pai para aceder ao schema e o privilégio USE SCHEMA para aceder a objetos dentro do schema. Com controles de acesso table ao nível do espaço de trabalho, por outro lado, conceder USAGE na catalog raiz concede automaticamente USAGE em todos os bancos de dados, mas USAGE na catalog raiz não é necessário.
  • Views: No Unity Catalog, o proprietário de uma exibição não precisa ser um proprietário dos elementos referenciados tables e viewsda exibição. Having o privilégio de SELECT é suficiente, juntamente com USE SCHEMA no schema pai do viewse USE CATALOG no catalogpai. Com controles de acesso table ao nível do espaço de trabalho, o proprietário de uma vista precisa ser proprietário de todos os recursos referenciados tables e views.
  • Sem suporte para ANY FILE ou ANONYMOUS FUNCTION: No Unity Catalog, não há nenhum conceito de ANY FILE ou ANONYMOUS FUNCTION protegível que possa permitir que um usuário sem privilégios execute código privilegiado.
  • Sem privilégio READ_METADATA: o Unity Catalog gerencia o acesso para visualizar metadados de uma maneira diferente. Consulte Unity Catalog privilégios e objetos protegíveis.

Junções entre objetos do metastore do Unity Catalog e do Hive

Usando a notação de namespace de três níveis, pode-se join dados num metastore do Unity Catalog com dados no metastore herdado do Hive.

Nota

Um join com dados no metastore legado do Hive só funcionará no espaço de trabalho where onde os dados residem. Tentar executar esse join em outro espaço de trabalho resulta em um erro. O Azure Databricks recomenda que você atualizartables herdados e views para o Unity Catalog.

O exemplo a seguir une os resultados do sales_currenttable no metastore herdado do Hive com o sales_historicaltable no metastore Unity Catalog 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")
))

Padrão catalog

Um catalog padrão é configurado para cada espaço de trabalho que está habilitado para o Unity Catalog.

Se você omitir o nome do catalog de nível superior ao executar operações de dados, o catalog padrão será assumido.

O catalog padrão que foi inicialmente configurado para o teu espaço de trabalho depende de como foi habilitado para o Unity Catalog:

  • Se seu espaço de trabalho foi habilitado para o Unity automaticamente, o de espaço de trabalho foi como o padrão . Veja Ativação automática do Unity Catalog.
  • Se o seu espaço de trabalho foi habilitado para Unity Catalog manualmente, o hive_metastorecatalog foi set como o catalogpadrão.

Se estiveres a fazer a transição do metastore do Hive para o Unity Catalog dentro de um espaço de trabalho existente, faz sentido usar hive_metastore como o catalog padrão para evitar afetar o código existente que faz referência ao Hive, a menos que tenhas migrado completamente do metastore do Hive.

Para saber como get e alterar a predefinição catalog, veja Gerir o catalog padrão.

Permissões de acesso a dados com escopo de cluster

Quando você usa o metastore do Hive junto com o Unity Catalog, os credentials de acesso a dados associados ao cluster são usados para acessar os dados do metastore do Hive, mas não os dados registrados no Unity Catalog.

Se os usuários acessarem caminhos que estão fora do Unity Catalog (como um caminho não registrado como um table ou local externo), os credentials de acesso atribuídos ao cluster serão usados.

Consulte Conectar-se ao Azure Data Lake Storage Gen2 e Blob Storage.

Atualize o sistema legado tables para o Unity Catalog

Tables no metastore do Hive não se beneficiam do set completo de recursos de segurança e governança que o Unity Catalog introduz, como auditoria integrada, linhagem e controle de acesso. A Databricks recomenda que você use de federação do Hive Metastore para migrar seus dados registrados no metastore do Hive para o Unity Catalogou para atualizar seus tables herdados diretamente, adicionando-os ao Unity Catalog.