Partilhar via


Trabalhar com o Unity Catalog e o metastore do Hive legado

Este artigo explica uma abordagem para continuar a usar o metastore do Hive por espaço de trabalho quando 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 utilizes a federação do Hive Metastore, marcada pelo e, para criar um catálogo federado no Unity Catalog que espelha o metastore do Hive. Eventualmente, deverás migrar todas as tuas cargas de trabalho herdadas para utilizarem 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 sales esquema 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 USE instrução:

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 tiver configurado o para o controlo de acesso à tabela herdada no Hive Metastore, o Databricks continuará a impor esses controlos de acesso para os dados no catálogo hive_metastore, para os clusters a ser executados no modo de acesso partilhado. O modelo de acesso do Unity Catalog difere ligeiramente dos controles de acesso herdados, como nenhuma DENY instrução. O metastore do Hive é um objeto no nível do espaço de trabalho. As permissões definidas no hive_metastore catálogo sempre se referem aos usuários e grupos locais no espaço de trabalho. Consulte o modelo de privilégios do Unity Catalog em comparação com o controlo de acesso a tabelas herdado.

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

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

  • Grupos de contas: as políticas de controlo de acesso no Unity Catalog são aplicadas a grupos de contas, enquanto as políticas de controlo de acesso para o metastore do Hive são aplicadas a grupos locais da área de trabalho. Consulte Tipos de grupos no Azure Databricks.
  • USE CATALOG e USE SCHEMA as 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 também deve ter o USE CATALOG privilégio em seu catálogo pai para acessar o esquema e o USE SCHEMA privilégio de acessar objetos dentro do esquema. Por outro lado, com controlos de acesso a tabelas ao nível da área de trabalho, a concessão de USAGE no catálogo raiz concede automaticamente USAGE em todas as bases de dados, mas USAGE não é necessário no catálogo raiz.
  • Vistas: no Unity Catalog, o proprietário de uma vista não precisa de ser proprietário das tabelas e vistas referenciadas da vista. Ter o SELECT privilégio é suficiente, juntamente com USE SCHEMA o esquema pai das visualizações e USE CATALOG no catálogo pai. Com os controlos de acesso à tabela ao nível da área de trabalho, o proprietário de uma vista tem de 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 um 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 gerencia o acesso para visualizar metadados de uma maneira diferente. Consulte Privilégios do catálogo Unity e objetos protegíveis.

Associações entre objetos do metastore do Unity Catalog e 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ê atualize tabelas e exibições herdadas para o Catálogo Unity.

O exemplo a seguir une os sales_current resultados da tabela no metastore herdado do Hive com a sales_historical tabela no metastore do Unity Catalog quando os order_id campos 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 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. Veja Ativação automática do Unity Catalog.
  • Se seu espaço de trabalho foi habilitado para o Unity Catalog manualmente, o hive_metastore catálogo 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.