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 sales
schema 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_metastore
catalog 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_metastore
catalog 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
- 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 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égioUSE CATALOG
no seu catalog pai para aceder ao schema e o privilégioUSE SCHEMA
para aceder a objetos dentro do schema. Com controles de acesso table ao nível do espaço de trabalho, por outro lado, concederUSAGE
na catalog raiz concede automaticamenteUSAGE
em todos os bancos de dados, masUSAGE
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 comUSE SCHEMA
no schema pai do viewseUSE 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
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 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_current
table no metastore herdado do Hive com o sales_historical
table 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_metastore
catalog 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.