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
eUSE 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 oUSE CATALOG
privilégio em seu catálogo pai para acessar o esquema e oUSE 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 deUSAGE
no catálogo raiz concede automaticamenteUSAGE
em todas as bases de dados, masUSAGE
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 comUSE SCHEMA
o esquema pai das visualizações eUSE 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
ouANONYMOUS FUNCTION
: No Unity Catalog, não há nenhum conceito de umANY 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 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.