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
eUSE 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 deUSE CATALOG
no seu catálogo pai para aceder ao esquema e o privilégio deUSE SCHEMA
para aceder a objetos dentro do esquema. Com controles de acesso à tabela no nível do espaço de trabalho, por outro lado, concederUSAGE
no catálogo raiz concede automaticamenteUSAGE
em todos os bancos de dados, mas não é necessárioUSAGE
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 comUSE SCHEMA
no esquema pai das exibições eUSE 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
ouANONYMOUS FUNCTION
: No Unity Catalog, não há nenhum conceito deANY FILE
ouANONYMOUS 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.