Partilhar via


Trabalhe com o Unity Catalog e o metastore herdado do Hive

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

Se seu espaço de trabalho estava em serviço antes de ser habilitado para o Catálogo Unity, ele provavelmente tem um metastore interno do Hive 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 catálogo federado no Unity Catalog que espelhe o metastore do Hive e, eventualmente, migrar todas as cargas de trabalho herdadas para usar esse catálogo federado. 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 junto com seus dados registrados no Unity Catalog.

Consultar o metastore do Hive no Catálogo Unity

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 catálogo de nível superior chamado hive_metastore no namespace de três níveis.

Por exemplo, você pode fazer referência a 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 Unity Catalog e no metastore do Hive

Se você configurou de controle de acesso à tabela herdada no metastore do Hive, o Databricks continuará a impor esses controles de acesso para dados no catálogo hive_metastore para clusters em execução no modo de acesso compartilhado. O modelo de acesso do Unity Catalog difere ligeiramente dos controlos de acesso legados, como a ausência de instruções do tipo DENY. O metastore do Hive é um objeto no nível do espaço de trabalho. As permissões definidas no catálogo hive_metastore sempre se referem aos usuários e grupos locais no espaço de trabalho. Consulte O modelo de privilégio do Catálogo Unity comparado ao controle de acesso a tabelas herdadas.

O modelo de privilégios do Unity Catalog em comparação com o controlo de acesso a tabelas herdadas

O modelo de controlo de acesso no Unity Catalog difere das maneiras seguintes do controlo de acesso a tabelas no metastore legado 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 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 de USE CATALOG no seu catálogo pai para aceder ao esquema e o privilégio de USE SCHEMA para aceder a objetos dentro do esquema. Com controles de acesso à tabela no nível do espaço de trabalho, por outro lado, conceder USAGE no catálogo raiz concede automaticamente USAGE em todos os bancos de dados, mas não é necessário USAGE no catálogo raiz.
  • Views: No Unity Catalog, 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 privilégio de SELECT é 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 vista precisa ser proprietário de todas as tabelas e vistas referenciadas.
  • 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 READ_METADATA privilégio: O Unity Catalog gestiona o acesso para visualizar metadados de uma forma diferente. Consulte privilégios do Catálogo Unity e objetos protegíveis.

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

Usando a notação de namespace de três níveis, você pode unir dados em um metastore do Unity Catalog com dados no metastore herdado do Hive.

Nota

Uma associação com dados no metastore herdado do Hive só funcionará no espaço de trabalho onde esses dados residem. Tentar executar essa junção em outro espaço de trabalho resulta em um erro. O Azure Databricks recomenda que você atualizar tabelas e exibições herdadas para o Catálogo Unity.

O exemplo a seguir une os resultados da tabela sales_current no metastore herdado do Hive com a tabela sales_historical no metastore do 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")
))

Catálogo padrão

Um catálogo padrão é configurado para cada espaço de trabalho habilitado para o Unity Catalog.

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 espaço de trabalho depende de como seu espaço de trabalho foi habilitado para o Unity Catalog:

  • Se o seu espaço de trabalho foi ativado para o Unity Catalog automaticamente, o catálogo do espaço de trabalho foi definido como o catálogo padrão. Consulte Ativação automática do Unity Catalog.
  • Se seu espaço de trabalho foi habilitado para o Unity Catalog 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 Unity Catalog dentro de um espaço de trabalho existente, faz sentido usáhive_metastore como o catálogo padrão para evitar afetar o código existente que faz referência ao metastore do hive, a menos que você tenha migrado totalmente do metastore do Hive.

Para saber como obter e alternar o catálogo padrão, consulte 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 Unity Catalog, 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 Unity Catalog.

Se os usuários acessarem caminhos que estão fora do Unity Catalog (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 Blob Storage.

Atualizar tabelas herdadas para o Catálogo Unity

As tabelas no metastore do Hive não se beneficiam do conjunto completo de recursos de segurança e governança que o Unity Catalog introduz, como auditoria integrada, linhagem e controle de acesso. O Databricks recomenda que você use de federação do Hive Metastore para migrar seus dados registrados no metastore do Hive para o Unity Catalog, ou para atualizar suas tabelas herdadas diretamente, adicionando-as ao Unity Catalog.