Use Unity Catalog com seu pipeline declarativo LakeFlow
Databricks recomenda configurar o pipeline declarativo LakeFlow com Unity Catalog. Usar Unity Catalog é o default para pipelines recém-criados.
pipeline configurado com Unity Catalog publica todas as tabelas de visualização materializada e transmissão definidas no catálogo e esquema especificados. O pipeline Unity Catalog pode ler de outras tabelas e volumes Unity Catalog .
Para gerenciar permissões nas tabelas criadas por um pipeline do Unity Catalog, use GRANT e REVOKE.
Este artigo discute a funcionalidade do modo de publicação default atual para pipeline. o pipeline criado antes de 5 de fevereiro de 2025 pode usar o modo de publicação legado e o esquema virtual LIVE
. Veja o esquema LIVE (legado).
Requisitos
Para criar tabelas de transmissão e visualizações materializadas em um esquema de destino no Unity Catalog, você deve ter as seguintes permissões no esquema e no catálogo pai:
USE CATALOG
privilégios no catálogo de destino.CREATE MATERIALIZED VIEW
e privilégiosUSE SCHEMA
no esquema de destino se seu pipeline criar uma visualização materializada.CREATE TABLE
e privilégiosUSE SCHEMA
no esquema de destino se seu pipeline criar tabelas de transmissão.- Se o seu pipeline criar novos esquemas, você deverá ter privilégios
USE CATALOG
eCREATE SCHEMA
no catálogo de destino.
requisitos de computação para executar um pipeline habilitado para Unity Catalog:
- Seu recurso compute deve ser configurado com modo de acesso padrão. Não há suporte para compute dedicada. Veja Modos de acesso.
o cálculo necessário para consultar tabelas criadas pelo pipeline declarativo LakeFlow usando Unity Catalog (incluindo tabelas de transmissão e visualização materializada) inclui qualquer um dos seguintes:
- SQL warehouses
- Modo de acesso padrão compute no Databricks Runtime 13.3 LTS ou acima.
- Modo de acesso dedicado compute, se o controle de acesso refinado estiver habilitado no compute dedicado (ou seja, estiver em execução no Databricks Runtime 15.4 ou superior e compute serverless estiver habilitado para o workspace). Para obter mais informações, consulte Controle de acesso refinado em computededicada.
- O modo de acesso dedicado compute em 13.3 LTS até 15.3, somente se o proprietário da tabela executar a consulta.
Limitações adicionais compute se aplicam. Veja a seção a seguir.
Limitações
As seguintes são limitações ao usar Unity Catalog com o pipeline declarativo LakeFlow :
-
Por default, somente o proprietário pipeline e os administradores workspace podem view os logs do driver do compute que executa um pipeline habilitado para o Unity Catalog. Para permitir que outros usuários acessem os logs do driver, consulte Permitir que usuários não administradores view os logs do driver de um pipelinehabilitado para o Unity Catalog.
-
O pipeline existente que usa o Hive metastore não pode ser atualizado para usar Unity Catalog. Para migrar um pipeline existente que grava no Hive metastore, você deve criar um novo pipeline e reingerir dados da(s) fonte(s) de dados. Consulte Criar um pipeline Unity Catalog clonando um pipelinedo Hive metastore.
-
Não é possível criar um pipeline habilitado para Unity Catalogem um workspace anexado a um metastore que foi criado durante a Visualização Pública Unity Catalog . Veja Atualizar para herança de privilégios.
-
JARs não são suportados. Somente bibliotecas Python de terceiros são suportadas. Veja gerenciar dependências Python para o pipeline declarativo LakeFlow.
-
Consultas de linguagem de manipulação de dados (DML) que modificam o esquema de uma tabela de transmissão não são suportadas.
-
Uma view materializada criada em um pipeline não pode ser usada como uma fonte de transmissão fora desse pipeline, por exemplo, em outro pipeline ou em um Notebook downstream.
-
Os dados para visualização materializada e tabelas de transmissão são armazenados no local de armazenamento do esquema que os contém. Se um local de armazenamento de esquema não for especificado, as tabelas serão armazenadas no local de armazenamento do catálogo. Se os locais de armazenamento do esquema e do catálogo não forem especificados, as tabelas serão armazenadas no local de armazenamento raiz do metastore.
-
A tab história do Catalog Explorer não mostra história para visualização materializada.
-
A propriedade
LOCATION
não é suportada ao definir uma tabela. -
Os pipelines habilitados para Unity Catalog não podem publicar no Hive metastore.
-
O suporte a Python UDF está em versão de pré-visualização pública.
Os arquivos subjacentes que dão suporte à visualização materializada podem incluir dados de tabelas upstream (incluindo possíveis informações de identificação pessoal) que não aparecem na definição view materializada. Esses dados são adicionados automaticamente ao armazenamento subjacente para dar suporte à atualização incremental da visualização materializada.
Como os arquivos subjacentes de uma view materializada podem correr o risco de expor dados de tabelas upstream que não fazem parte do esquema view materializada, Databricks recomenda não compartilhar o armazenamento subjacente com consumidores downstream não confiáveis.
Por exemplo, suponha que uma definição view materializada inclua uma cláusula COUNT(DISTINCT field_a)
. Embora a definição view materializada inclua apenas a cláusula agregada COUNT DISTINCT
, os arquivos subjacentes conterão uma lista dos valores reais de field_a
.
Posso usar Hive metastore e o pipeline Unity Catalog juntos?
Seu workspace pode conter pipelines que usam Unity Catalog e o Hive metastore. No entanto, um único pipeline não pode gravar no Hive metastore e Unity Catalog. O pipeline existente que grava no Hive metastore não pode ser atualizado para usar Unity Catalog. Para migrar um pipeline existente que grava no Hive metastore, você deve criar um novo pipeline e reingerir dados da(s) fonte(s) de dados. Consulte Criar um pipeline Unity Catalog clonando um pipelinedo Hive metastore.
Os pipelines existentes que não usam Unity Catalog não são afetados pela criação de um novo pipeline configurado com Unity Catalog. Esses pipelines continuam a persistir dados no Hive metastore usando o local de armazenamento configurado.
A menos que especificado de outra forma neste documento, todas as funcionalidades existentes de fonte de dados e pipeline declarativo LakeFlow são suportadas com pipelines que usam Unity Catalog. Tanto as interfaces Python quanto SQL são suportadas com pipelines que usam Unity Catalog.
Tabelas inativas
Quando o pipeline declarativo LakeFlow é configurado para persistir dados no Unity Catalog, o pipeline gerencia o ciclo de vida e as permissões da tabela. As tabelas podem se tornar inativas se sua definição for removida de um pipeline e serão excluídas quando o pipeline for excluído.
Quando você remove uma definição de tabela da origem pipeline , a próxima atualização pipeline marca a view materializada correspondente ou a entrada da tabela de transmissão como inativa. Você ainda pode consultar tabelas inativas, mas o pipeline não as atualiza mais. Para limpar tabelas de visualização materializada ou transmissão, DROP
explicitamente a tabela.
- Você pode recuperar tabelas descartadas em até 7 dias usando o comando
UNDROP
. - Para manter o comportamento legado em que a view materializada ou a entrada da tabela de transmissão é removida do Unity Catalog na próxima atualização pipeline , defina a configuração pipeline
"pipelines.dropInactiveTables": "true"
. Os dados reais são retidos por um período para que possam ser recuperados caso sejam excluídos por engano. Os dados podem ser recuperados em até 7 dias adicionando a view materializada ou a tabela de transmissão de volta à definição pipeline .
Excluir o pipeline completamente (em vez de remover uma definição de tabela da origem do pipeline) também exclui todas as tabelas definidas naquele pipeline. A interface do usuário do pipeline declarativo LakeFlow solicita que você confirme a exclusão de um pipeline.
Escrever tabelas no Unity Catalog a partir do pipeline declarativo LakeFlow
Para gravar suas tabelas no Unity Catalog, você deve configurar seu pipeline para trabalhar com elas por meio do seu workspace. Ao criar um pipeline, selecione Unity Catalog em Opções de armazenamento , selecione um catálogo no menu suspenso Catálogo e selecione um esquema existente ou insira o nome de um novo esquema no menu suspenso Esquema de destino . Para saber mais sobre os catálogos do Unity Catalog, consulte O que são catálogos no Databricks?. Para saber mais sobre esquemas no Unity Catalog, consulte O que são esquemas no Databricks?.
Ingerir dados em um pipeline do Unity Catalog
Seu pipeline configurado para usar o Unity Catalog pode ler dados de:
- Unity Catalog gerencia e tabelas externas, view, materialized view e tabelas de transmissão.
- Tabelas e visualização Hive metastore .
- Auto Loader usando a função
read_files()
para ler locais externos Unity Catalog . - Apache Kafka e Amazon Kinesis.
A seguir estão exemplos de leitura de tabelas do Unity Catalog e Hive metastore .
ingestão de lotes de uma tabela Unity Catalog
- SQL
- Python
CREATE OR REFRESH MATERIALIZED VIEW
table_name
AS SELECT
*
FROM
my_catalog.my_schema.table1;
@dp.materialized_view
def table_name():
return spark.read.table("my_catalog.my_schema.table")
alterações de transmissão de uma tabela Unity Catalog
- SQL
- Python
CREATE OR REFRESH STREAMING TABLE
table_name
AS SELECT
*
FROM
STREAM(my_catalog.my_schema.table1);
@dp.table
def table_name():
return spark.readStream.table("my_catalog.my_schema.table")
Ingerir dados do Hive metastore
Um pipeline que usa Unity Catalog pode ler dados de tabelas Hive metastore usando o catálogo hive_metastore
:
- SQL
- Python
CREATE OR REFRESH MATERIALIZED VIEW
table_name
AS SELECT
*
FROM
hive_metastore.some_schema.table;
@dp.materialized_view
def table3():
return spark.read.table("hive_metastore.some_schema.table")
Ingerir dados do Auto Loader
- SQL
- Python
CREATE OR REFRESH STREAMING TABLE table_name
AS SELECT *
FROM STREAM read_files(
"/path/to/uc/external/location",
format => "json"
)
@dp.table(table_properties={"quality": "bronze"})
def table_name():
return (
spark.readStream.format("cloudFiles")
.option("cloudFiles.format", "json")
.load(f"{path_to_uc_external_location}")
)
Compartilhar visualização materializada
Por default, somente o proprietário pipeline tem permissão para consultar o conjunto de dados criado pelo pipeline. Você pode dar a outros usuários a capacidade de consultar uma tabela usando instruções GRANT e pode revogar o acesso à consulta usando instruções REVOKE . Para obter mais informações sobre privilégios no Unity Catalog, consulte gerenciar privilégios no Unity Catalog.
Conceder seleção em uma tabela
GRANT SELECT ON TABLE
my_catalog.my_schema.table_name
TO
`user@databricks.com`
Revogar seleção em uma tabela
REVOKE SELECT ON TABLE
my_catalog.my_schema.table_name
FROM
`user@databricks.com`
Conceder privilégios para criar tabela ou criar view materializada
GRANT CREATE { MATERIALIZED VIEW | TABLE } ON SCHEMA
my_catalog.my_schema
TO
{ principal | user }
ver linhagem de um pipeline
A linhagem para tabelas no pipeline declarativo LakeFlow é visível no Catalog Explorer. A interface de linhagem do Catalog Explorer mostra as tabelas upstream e downstream para visualização materializada ou tabelas de transmissão em um pipeline habilitado para Unity Catalog. Para saber mais sobre a linhagem Unity Catalog , consulte view linhagem de dados using Unity Catalog.
Para uma view materializada ou tabela de transmissão em um pipeline habilitado para o Unity Catalog, a interface de linhagem do Catalog Explorer também será vinculada ao pipeline que produziu a view materializada ou tabela de transmissão se o pipeline estiver acessível no workspace atual.
Adicionar, alterar ou excluir dados em uma tabela de transmissão
Você pode usar instruções de linguagem de manipulação de dados (DML), incluindo instruções de inserção, atualização, exclusão e merge , para modificar tabelas de transmissão publicadas no Unity Catalog. O suporte para consultas DML em tabelas de transmissão permite casos de uso como atualização de tabelas para compliance com o Regulamento Geral de Proteção de Dados (GDPR) (GDPR).
- As declarações DML que modificam o esquema de tabela de uma tabela de streaming não são suportadas. Certifique-se de que suas instruções DML não tentem evoluir o esquema da tabela.
- As instruções DML que atualizam uma tabela de transmissão podem ser executadas somente em um cluster Unity Catalog compartilhado ou em um SQL warehouse usando Databricks Runtime 13.3 LTS e acima.
- Como a transmissão requer somente anexação de fonte de dados, se o seu processamento exigir transmissão de uma tabela de transmissão de origem com alterações (por exemplo, por instruções DML), defina o sinalizador skipChangeCommits ao ler a tabela de transmissão de origem. Quando
skipChangeCommits
é definido, as transações que excluem ou modificam registros na tabela de origem são ignoradas. Se o seu processamento não exigir uma tabela de transmissão, você poderá usar uma view materializada (que não tenha a restrição de somente anexação) como tabela de destino.
A seguir estão exemplos de instruções DML para modificar registros em uma tabela de transmissão.
Excluir registros com um ID específico:
DELETE FROM my_streaming_table WHERE id = 123;
Atualizar registros com um ID específico:
UPDATE my_streaming_table SET name = 'Jane Doe' WHERE id = 123;
Publicar tabelas com filtros de linha e máscaras de coluna
Visualização
Este recurso está em Visualização Pública.
Os filtros de linha permitem que você especifique uma função que se aplica como um filtro sempre que uma varredura de tabela busca linhas. Esses filtros garantem que as consultas subsequentes retornem apenas linhas para as quais o predicado do filtro seja avaliado como verdadeiro.
As máscaras de coluna permitem mascarar os valores de uma coluna sempre que uma varredura de tabela busca linhas. Consultas futuras para essa coluna retornarão o resultado da função avaliada em vez do valor original da coluna. Para obter mais informações sobre o uso de filtros de linha e máscaras de coluna, consulte Filtros de linha e máscaras de coluna.
Gerenciando filtros de linha e máscaras de coluna
Filtros de linha e máscaras de coluna em tabelas de exibição materializada e transmissão devem ser adicionados, atualizados ou removidos por meio da instrução CREATE OR REFRESH
.
Para obter uma sintaxe detalhada sobre a definição de tabelas com filtros de linha e máscaras de coluna, consulte Referência da linguagem SQL do pipeline declarativoLakeFlow e Referência da linguagem Python do pipeline declarativoLakeFlow.
Comportamento
A seguir estão alguns detalhes importantes ao usar filtros de linha ou máscaras de coluna no pipeline declarativo LakeFlow :
- atualizar como proprietário : quando uma atualização pipeline atualiza uma view materializada ou tabela de transmissão, as funções de filtro de linha e máscara de coluna são executadas com os direitos do proprietário pipeline . Isso significa que a refresh da tabela usa o contexto de segurança do usuário que criou o pipeline. Funções que verificam o contexto do usuário (como
CURRENT_USER
eIS_MEMBER
) são avaliadas usando o contexto do usuário do proprietário do pipeline. - Consulta : Ao consultar uma view materializada ou tabela de transmissão, as funções que verificam o contexto do usuário (como
CURRENT_USER
eIS_MEMBER
) são avaliadas usando o contexto do usuário do invocador. Essa abordagem impõe segurança de dados e controles de acesso específicos do usuário com base no contexto do usuário atual. - Ao criar uma visualização materializada sobre tabelas de origem que contêm filtros de linha e máscaras de coluna, a refresh da view materializada é sempre uma refresh completa. Uma refresh completa reprocessa todos os dados disponíveis na fonte com as definições mais recentes. Este processo verifica se as políticas de segurança nas tabelas de origem são avaliadas e aplicadas com os dados e definições mais atualizados.
Observabilidade
Use DESCRIBE EXTENDED
, INFORMATION_SCHEMA
ou o Catalog Explorer para examinar os filtros de linha e máscaras de coluna existentes que se aplicam a uma determinada view materializada ou tabela de transmissão. Essa funcionalidade permite que os usuários auditem e revisem o acesso a dados e as medidas de proteção em tabelas de exibição materializada e transmissão.