Partilhar via


Utilize o Unity Catalog com os seus pipelines DLT

Importante

O suporte DLT para o Unity Catalog está em visualização pública .

O Databricks recomenda a configuração de pipelines DLT com o Unity Catalog.

Os pipelines configurados com o Unity Catalog publicam todas as visualizações materializadas definidas e tabelas de streaming no catálogo e esquema especificados. Os pipelines do Catálogo Unity podem ser lidos de outras tabelas e volumes do Catálogo Unity.

Para gerir permissões nas tabelas criadas por um pipeline do Catálogo Unity, use GRANT e REVOKE.

Observação

Este artigo discute as funcionalidades do modo de publicação atual padrão para pipelines. Os pipelines criados antes de 5 de fevereiro de 2025 podem usar o modo de publicação herdado e um esquema virtual LIVE. Consulte esquema LIVE (legado).

Requisitos

Para criar tabelas de streaming e exibiçõ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 USE SCHEMA privilégios no esquema de destino se o pipeline criar exibições materializadas.
  • Com os privilégios CREATE TABLE e USE SCHEMA no esquema de destino, caso o pipeline crie tabelas de streaming .

Se o pipeline criar novos esquemas, você deverá ter privilégios de USE CATALOG e CREATE SCHEMA no catálogo de destino.

Computação necessária para executar um pipeline habilitado para Unity Catalog:

  • Modo de acesso padrão (anteriormente modo de acesso compartilhado). Um pipeline habilitado para Unity Catalog não pode ser executado em uma computação dedicada (anteriormente computação de usuário único). Consulte limitações do modo de acesso padrão no Unity Catalog.

A computação necessária para consultar tabelas criadas por um pipeline DLT usando o Unity Catalog (incluindo tabelas de streaming e exibições materializadas) inclui qualquer um dos seguintes:

  • Armazéns SQL
  • Computação do modo de acesso padrão no Databricks Runtime 13.3 LTS ou superior.
  • Computação em modo de acesso dedicado, se o controle de acesso refinado estiver habilitado na computação dedicada (ou seja, ele estiver sendo executado no Databricks Runtime 15.4 ou superior e a computação sem servidor estiver habilitada para o espaço de trabalho). Para obter mais informações, consulte Controle de acesso refinado em computação dedicada (anteriormente computação de usuário único).
  • Modo de computação de acesso dedicado entre 13.3 LTS e 15.3, apenas se o proprietário da tabela executar a consulta.

Aplicam-se limitações de computação adicionais. Consulte a secção que se segue.

Limitações

A seguir estão as limitações ao usar o Unity Catalog com DLT:

  • Não é possível criar um pipeline ativado para o Unity Catalog em um espaço de trabalho anexado a um metastore que foi criado durante a versão pública de teste do Unity Catalog. Consulte Atualização para herança de privilégios.
  • JARs não são suportados. Apenas bibliotecas Python de terceiros são suportadas. Consulte Gerenciar dependências Python para pipelines DLT.
  • Não há suporte para consultas DML (linguagem de manipulação de dados) que modificam o esquema de uma tabela de streaming.
  • Uma exibição materializada criada em um pipeline DLT não pode ser usada como uma fonte de streaming fora desse pipeline, por exemplo, em outro pipeline ou em um notebook downstream.
  • Os dados para visualizações materializadas e tabelas em streaming são armazenados no local de armazenamento do esquema que as 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 guia Catalog Explorer History não mostra o histórico de visões materializadas.
  • A propriedade LOCATION não é suportada ao definir uma tabela.
  • Os pipelines habilitados para Unity Catalog não podem publicar no metastore do Hive.
  • Não é possível usar Delta Sharing com uma vista materializada DLT ou tabela de streaming publicada no Unity Catalog.

Observação

Os arquivos subjacentes que suportam visualizações materializadas podem incluir dados de tabelas upstream (incluindo possíveis informações pessoalmente identificáveis) que não aparecem na definição de exibição materializada. Esses dados são adicionados automaticamente ao armazenamento subjacente para oferecer suporte à atualização incremental de exibições materializadas.

Como os arquivos subjacentes de uma exibição materializada podem correr o risco de expor dados de tabelas upstream que não fazem parte do esquema de exibição materializado, o Databricks recomenda não compartilhar o armazenamento subjacente com consumidores downstream não confiáveis.

Por exemplo, suponha que uma definição de exibição materializada inclua uma cláusula COUNT(DISTINCT field_a). Embora a definição de exibição materializada inclua apenas a cláusula COUNT DISTINCT agregada, os arquivos subjacentes conterão uma lista dos valores reais de field_a.

Posso usar o metastore do Hive e os pipelines do Unity Catalog juntos?

Seu espaço de trabalho pode conter pipelines que usam o Unity Catalog e o metastore herdado do Hive. No entanto, um único pipeline não pode gravar no metastore do Hive e no Unity Catalog. Os pipelines existentes que gravam no metastore do Hive não podem ser convertidos para usar o Unity Catalog. Para migrar um pipeline existente que grava no metastore do Hive, você deve criar um novo pipeline e re-ingerir dados da(s) fonte(s) de dados. Veja como Criar um pipeline do Unity Catalog clonando um pipeline de metastore do Hive.

Os pipelines existentes que não usam o Unity Catalog não são afetados pela criação de novos pipelines configurados com o Unity Catalog. Esses pipelines continuam a manter os dados no metastore do Hive usando o local de armazenamento configurado.

A menos que especificado de outra forma neste documento, todas as fontes de dados existentes e a funcionalidade DLT são suportadas com pipelines que usam o Unity Catalog. As interfaces Python e SQL são compatíveis com pipelines que usam o Unity Catalog.

Alterações à funcionalidade existente

Quando a DLT é configurada para manter dados no Unity Catalog, o pipeline de DLT gerencia o ciclo de vida e as permissões da tabela. Como resultado:

  • Quando uma tabela é removida da definição de pipeline, a próxima atualização de pipeline marcará a exibição materializada correspondente ou a entrada da tabela de streaming como inativa. As tabelas inativas ainda podem ser consultadas, mas não serão atualizadas. Para limpar visualizações materializadas ou tabelas de streaming, pode-se DROP explicitamente a tabela.
    • Você pode recuperar qualquer tabela descartada dentro de 7 dias usando o comando UNDROP.
    • Para manter o comportamento legado em que a exibição materializada ou a entrada da tabela de streaming é removida do Catálogo Unity na atualização seguinte do pipeline, defina a configuração do pipeline para "pipelines.dropInactiveTables": "true". Os dados reais são retidos por um período para que possam ser recuperados se excluídos por engano. Os dados podem ser recuperados no prazo de 7 dias, ao adicionar novamente a visualização materializada ou a tabela de streaming à definição do pipeline.
  • A exclusão do pipeline DLT resulta na exclusão de todas as tabelas definidas nesse pipeline. Devido a essa alteração, a interface do usuário DLT é atualizada para solicitar que você confirme a exclusão de um pipeline.
  • As tabelas de suporte internas, incluindo aquelas usadas para suportar APPLY CHANGES INTO, não são diretamente acessíveis pelos usuários.

Escrever tabelas no Unity Catalog a partir de um pipeline DLT

Para escrever suas tabelas no Unity Catalog, você deve configurar seu pipeline para trabalhar com ele em seu espaço de trabalho. Quando você criar um pipeline, selecione Catálogo Unity 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 Azure Databricks?. Para saber mais sobre esquemas no Unity Catalog, consulte O que são esquemas no Azure Databricks?.

Ingerir dados num pipeline do Catálogo Unity

Seu pipeline configurado para usar o Unity Catalog pode ler dados de:

  • Unity Catalog tabelas geridas e externas, vistas, vistas materializadas e tabelas de streaming.
  • Tabelas e visualizações do metastore do Hive.
  • Auto Loader usando a função read_files() para ler a partir de locais externos do Unity Catalog.
  • Apache Kafka e Amazon Kinesis.

A seguir estão exemplos de leitura de tabelas de metastore do Unity Catalog e do Hive.

Ingestão em lote de uma tabela do Unity Catalog

SQL

CREATE OR REFRESH MATERIALIZED VIEW
  table_name
AS SELECT
  *
FROM
  my_catalog.my_schema.table1;

Python

@dlt.table
def table_name():
  return spark.read.table("my_catalog.my_schema.table")

Transmitir alterações a partir de uma tabela do Catálogo Unity

SQL

CREATE OR REFRESH STREAMING TABLE
  table_name
AS SELECT
  *
FROM
  STREAM(my_catalog.my_schema.table1);

Python

@dlt.table
def table_name():
  return spark.readStream.table("my_catalog.my_schema.table")

Ingerir dados do metastore do Hive

Um pipeline que utiliza o Unity Catalog pode ler dados de tabelas de metastore do Hive através do catálogo hive_metastore:

SQL

CREATE OR REFRESH MATERIALIZED VIEW
  table_name
AS SELECT
  *
FROM
  hive_metastore.some_schema.table;

Python

@dlt.table
def table3():
  return spark.read.table("hive_metastore.some_schema.table")

Ingerir dados do Auto Loader

SQL

CREATE OR REFRESH STREAMING TABLE
  table_name
AS SELECT
  *
FROM
  read_files(
    <path-to-uc-external-location>,
    "json"
  )

Python

@dlt.table(table_properties={"quality": "bronze"})
def table_name():
  return (
     spark.readStream.format("cloudFiles")
     .option("cloudFiles.format", "json")
     .load(f"{path_to_uc_external_location}")
 )

Partilhe pontos de vista materializados

Por padrão, somente o proprietário do pipeline tem permissão para consultar conjuntos de dados criados 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 Manage privileges in Unity Catalog.

Conceder permissão de seleção numa 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 de criação de tabela ou de criação de vista materializada

GRANT CREATE { MATERIALIZED VIEW | TABLE } ON SCHEMA
  my_catalog.my_schema
TO
  { principal | user }

Visualizar linhagem de um processo

A linhagem para tabelas num pipeline DLT é visível no Explorador de Catálogos. A interface de utilizador da linhagem do Catalog Explorer mostra as tabelas a montante e a jusante para visualizações materializadas ou tabelas de streaming num pipeline com o Unity Catalog habilitado. Para saber mais sobre a linhagem do Catálogo Unity, consulte Capturar e visualizar a linhagem de dados utilizando o Catálogo Unity.

Para uma vista materializada ou tabela de streaming num pipeline DLT ativado pelo Unity Catalog, a interface de linhagem do Catalog Explorer também ligará ao pipeline que produziu a vista materializada ou tabela de streaming, se o pipeline for acessível a partir do espaço de trabalho atual.

Adicionar, alterar ou excluir dados em uma tabela de streaming

Você pode usar instruções DML ( de linguagem de manipulação de dados), incluindo instruções de inserção, atualização, exclusão e mesclagem, para modificar tabelas de streaming publicadas no Catálogo Unity. O suporte para consultas DML em tabelas de streaming permite casos de uso, como a atualização de tabelas para conformidade com o Regulamento Geral de Proteção de Dados (GDPR).

Observação

  • Não há suporte para instruções DML que modificam o esquema de tabela de uma tabela de streaming. 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 streaming podem ser executadas somente em um cluster compartilhado do Catálogo Unity ou em um armazém SQL usando o Databricks Runtime 13.3 LTS e superior.
  • Como o streaming requer fontes de dados somente acréscimo, se o processamento exigir streaming de uma tabela de streaming de origem com alterações (por exemplo, por instruções DML), defina o sinalizador skipChangeCommits ao ler a tabela de streaming de origem. Quando skipChangeCommits é definido, as transações que excluem ou modificam registros na tabela de origem são ignoradas. Se o processamento não exigir uma tabela de streaming, você poderá usar uma exibição materializada (que não tem a restrição de acréscimo apenas) como tabela de destino.

A seguir estão exemplos de instruções DML para modificar registros em uma tabela de streaming.

Excluir registros com uma ID específica:

DELETE FROM my_streaming_table WHERE id = 123;

Atualizar registos 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

Importante

Este recurso está no Public Preview .

Filtros de linha permitem especificar uma função que se aplica como um filtro sempre que uma verificação de tabela busca linhas. Esses filtros garantem que as consultas subsequentes retornem apenas linhas para as quais o predicado do filtro seja avaliado como true.

As máscaras de coluna permitem mascarar os valores de uma coluna sempre que uma verificação de tabela busca linhas. Consultas futuras para essa coluna retornam o resultado da função avaliada em vez do valor original da coluna. Para obter mais informações sobre como usar filtros de linha e máscaras de coluna, consulte Filtrar dados de tabela confidenciais usando 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 exibições materializadas e tabelas de streaming devem ser adicionados, atualizados ou descartados através da instrução CREATE OR REFRESH.

Para obter sintaxe detalhada sobre a definição de tabelas com filtros de linha e máscaras de coluna, consulte a referência da linguagem DLT SQL e a referência da linguagem DLT Python .

Comportamento

A seguir estão detalhes importantes ao usar filtros de linha ou máscaras de coluna em pipelines DLT:

  • Atualizar como proprietário: quando uma atualização de pipeline atualiza uma exibição materializada ou uma tabela de streaming, as funções de filtro de linha e máscara de coluna são executadas com os direitos do proprietário do pipeline. Isso significa que a atualização da tabela usa o contexto de segurança do usuário que criou o pipeline. As funções que verificam o contexto do usuário (como CURRENT_USER e IS_MEMBER) são avaliadas usando o contexto de usuário do proprietário do pipeline.
  • Query: Ao consultar uma exibição materializada ou uma tabela de streaming, as funções que verificam o contexto do usuário (como CURRENT_USER e IS_MEMBER) são avaliadas usando o contexto de usuário do invocador. Essa abordagem impõe segurança de dados específicos do usuário e controles de acesso com base no contexto do usuário atual.
  • Ao criar exibições materializadas em tabelas de origem que contêm filtros de linha e máscaras de coluna, a atualização da exibição materializada é sempre uma atualização completa. Uma atualização completa reprocessa todos os dados disponíveis na fonte com as definições mais recentes. Esse processo verifica se as políticas de segurança nas tabelas de origem são avaliadas e aplicadas com os dados e definições de data mais up-to.

Observabilidade

Use DESCRIBE EXTENDED, INFORMATION_SCHEMAou o Catalog Explorer para examinar os filtros de linha e as máscaras de coluna existentes que se aplicam a uma determinada exibição materializada ou tabela de Streaming. Essa funcionalidade permite que os usuários auditem e revisem o acesso a dados e as medidas de proteção em visualizações materializadas e tabelas de streaming.