Trabalhe com o site Unity Catalog e o legado Hive metastore
Este artigo explica uma abordagem para continuar a usar o legado porworkspace Hive metastore quando seu Databricks workspace estiver habilitado para Unity Catalog.
Se o seu workspace estava em serviço antes de ser habilitado para Unity Catalog, ele provavelmente tem um Hive metastore integrado que contém dados que o senhor talvez queira continuar a usar. Este artigo descreve como continuar a trabalhar com tabelas que estão registradas em Hive metastore.
O per-workspace Hive metastore é um recurso legado, e as instruções fornecidas neste artigo representam um fluxo de trabalho legado.
As tabelas no site Hive metastore não se beneficiam do conjunto completo de recursos de segurança e governança fornecidos pelo site Unity Catalog, como auditoria integrada, linhagem e controle de acesso. Databricks O senhor recomenda migrar essas tabelas e as cargas de trabalho que as referenciam para Unity Catalog e desativar o acesso direto a Hive metastore.
Dois caminhos de migração estão disponíveis:
-
Atualize todas as tabelas registradas no site Hive metastore para Unity Catalog. Consulte Upgrade Hive tables and view to Unity Catalog e Use the UCX utilidades to upgrade your workspace to Unity Catalog.
-
Federe seu Hive metastore para Unity Catalog usando a federaçãoHive metastore para uma abordagem mais gradual. Hive metastore A federação cria um catálogo externo em Unity Catalog que espelha o Hive metastore.
Consulte também Disable access to the Hive metastore used by your Databricks workspace .
Consulte o site Hive metastore em Unity Catalog
O metastore Unity Catalog é aditivo, o que significa que pode ser usado com oworkspace Hive metastore em Databricks. O site Hive metastore aparece como um catálogo de nível superior chamado hive_metastore
no namespace de três níveis.
Por exemplo, o senhor pode se referir a uma tabela chamada sales_raw
no esquema sales
no site legado Hive metastore usando a seguinte notação:
- SQL
- Python
- R
- Scala
SELECT * from hive_metastore.sales.sales_raw;
display(spark.table("hive_metastore.sales.sales_raw"))
library(SparkR)
display(tableToDF("hive_metastore.sales.sales_raw"))
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
- Python
- R
- Scala
USE hive_metastore.sales;
SELECT * from sales_raw;
spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))
library(SparkR)
sql("USE hive_metastore.sales")
display(tableToDF("sales_raw"))
spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))
Controle de acesso em Unity Catalog em comparação com o legado Hive metastore
Se o senhor configurou o controle de acesso legado da tabela no Hive metastore, o Databricks continuará a aplicar esses controles de acesso aos dados no catálogo hive_metastore
para clustering em execução no modo de acesso padrão.
O modelo de acesso do Unity Catalog é um pouco diferente dos controles de acesso legados:
- Metastore : O Unity Catalog é um objeto de nível accounte o Hive metastore é um objeto de nível workspace. As permissões definidas no catálogo
hive_metastore
sempre se referem aos usuários e grupos locais no workspace. - grupos de contas : As políticas de controle de acesso em Unity Catalog são aplicadas aos grupos account, enquanto as políticas de controle de acesso para Hive metastore são aplicadas aos grupos workspace-local. Consulte Fontes do grupo.
USE CATALOG
eUSE SCHEMA
são necessárias no catálogo e no esquema para todas as operações em objetos dentro do catálogo ou do esquema : Independentemente dos privilégios de um diretor em uma tabela, o diretor também deve ter o privilégioUSE CATALOG
em seu catálogo pai para acessar o esquema e o privilégioUSE SCHEMA
para acessar objetos dentro do esquema. Com workspace-level access control da tabela, por outro lado, a concessão deUSAGE
no catálogo raiz concede automaticamenteUSAGE
em todos os bancos de dados, masUSAGE
no catálogo raiz não é necessário.- view : Em Unity Catalog, o proprietário de um view não precisa ser proprietário das tabelas e visualizações referenciadas do view. Ter o privilégio
SELECT
é suficiente, juntamente comUSE SCHEMA
no esquema pai da visualização eUSE CATALOG
no catálogo pai. Com o controle de acesso de nível workspaceda tabela, o proprietário de uma viewprecisa ser o proprietário de todas as tabelas e visualizações referenciadas. - Não há suporte para
ANY FILE
ouANONYMOUS FUNCTION
: Em Unity Catalog, não há nenhum conceito deANY FILE
ouANONYMOUS FUNCTION
securizável que possa permitir que um usuário sem privilégios execute um código privilegiado. - Não há suporte para
DENY
: O modelo de privilégio do Unity Catalog é baseado no princípio do menor privilégio. Privilégios que não são concedidos são negados implicitamente. - Sem privilégio
READ_METADATA
: Unity Catalog gerenciar o acesso aos metadados de view de uma maneira diferente. Consulte Privilégios e objetos protegidos do Unity Catalog.
união entre os objetos Unity Catalog e Hive metastore
Ao usar a notação de namespace de três níveis, o senhor pode join dados em um metastore Unity Catalog com dados no legado Hive metastore.
Um join com dados no legado Hive metastore só funcionará no workspace onde esses dados residem. A tentativa de executar esse join em outro workspace resulta em um erro. Databricks Recomenda que o senhor atualize as tabelas e visualizações legadas para Unity Catalog.
O exemplo a seguir une os resultados da tabela sales_current
no legado Hive metastore com a tabela sales_historical
no metastore Unity Catalog quando os campos order_id
são iguais.
- SQL
- Python
- R
- Scala
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;
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
))
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))
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 default é configurado para cada workspace que está habilitado para Unity Catalog.
Se o senhor omitir o nome do catálogo de nível superior ao realizar operações de dados, o catálogo default será assumido.
O catálogo default que foi inicialmente configurado para seu workspace depende de como seu workspace foi habilitado para Unity Catalog:
- Se o seu workspace foi ativado para Unity Catalog automaticamente, o catálogoworkspace foi definido como o catálogo default. Consulte Ativação automática do Unity Catalog.
- Se o seu workspace foi ativado para Unity Catalog manualmente, o catálogo
hive_metastore
foi definido como o catálogo default.
Se o senhor estiver fazendo a transição de Hive metastore para Unity Catalog dentro de um workspace existente, faz sentido usar hive_metastore
como o catálogo default para evitar afetar o código existente que faz referência ao Hive metastore, a menos que tenha migrado totalmente do Hive metastore.
Para saber como obter e alternar o catálogo default, consulte gerenciar o catálogo default
permissões de acesso a dados com escopo de clustering
Quando você usa o Hive metastore junto com o Unity Catalog, as credenciais de acesso a dados associadas aos clusters são usadas para acessar os dados Hive metastore , 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 aos clusters serão usadas.
Consulte Conectar ao Amazon S3.