Compartilhar via


Usar o Unity Catalog para pipelines

O Databricks recomenda configurar o Lakeflow Spark Declarative Pipelines com o Catálogo do Unity. Usar o Catálogo do Unity é o padrão para pipelines recém-criados.

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

Para gerenciar permissões nas tabelas criadas por um pipeline do Unity Catalog, use GRANT e REVOKE.

Observação

Este artigo discute a funcionalidade do modo de publicação padrão atual para pipelines. Pipelines criados antes de 5 de fevereiro de 2025 podem usar o modo de publicação herdado e o esquema virtual LIVE. Confira Esquema LIVE (herdado).

Requisitos

Para criar tabelas de streaming e exibições materializadas em um esquema de destino no Catálogo do Unity, você deve ter as seguintes permissões no esquema e no catálogo pai:

  • USE CATALOG privilégios no catálogo de destino.
  • Privilégios CREATE MATERIALIZED VIEW e USE SCHEMA no esquema de destino se o pipeline criar exibições materializadas.
  • Privilégios CREATE TABLE e USE SCHEMA no esquema de destino se o pipeline criar tabelas de streaming.
  • Se o seu pipeline criar novos esquemas, você deverá ter privilégios USE CATALOG e CREATE SCHEMA no catálogo de destino.

Requisitos de computação para executar um pipeline habilitado para Catálogo do Unity:

  • Seu recurso de computação deve ser configurado com o modo de acesso padrão. Não há suporte para computação dedicada. Consulte Modos de acesso.

A computação necessária para consultar tabelas criadas por pipelines usando o Catálogo do Unity (incluindo tabelas de streaming e exibições materializadas) inclui qualquer uma das seguintes opções:

  • Armazenamentos SQL
  • Computação em modo de acesso padrão no Databricks Runtime 13.3 LTS ou superior.
  • Modo de Acesso Dedicado à Computação, se o controle de acesso refinado estiver habilitado na computação dedicada (ou seja, estiver em execução no Databricks Runtime 15.4 ou acima e a computação sem servidor estiver habilitada para o workspace). Para obter mais informações, consulte o controle de acesso refinado na computação dedicada.
  • O modo de acesso dedicado computa no 13.3 LTS até o 15.3 somente se o proprietário da tabela executar a consulta.

Aplicam-se limitações de computação adicionais. Consulte a seção a seguir.

Limitações

Veja a seguir as limitações ao usar Unity Catalog com pipelines:

  • Não é possível criar um pipeline habilitado para Catálogo do Unity em um workspace anexado a um metastore que foi criado durante a visualização pública do Catálogo do Unity. Consulte Atualizar para a herança de privilégios.
  • Não há suporte para JARs. Somente bibliotecas Python de terceiros são compatíveis. Consulte Gerenciar dependências do Python para pipelines.
  • Não há suporte para consultas de linguagem de manipulação de dados (DML) que modificam o esquema de uma tabela de streaming.
  • Uma visualização materializada criada em um pipeline 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 de streaming 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 de esquema e catálogo não forem especificados, as tabelas serão armazenadas no local de armazenamento raiz do metastore.
  • A guia Histórico do Explorador de Catálogos não mostra o histórico de exibições materializadas.
  • Não há suporte para a propriedade LOCATION ao definir uma tabela.
  • Os pipelines habilitados para o Unity Catalog não podem publicar no metastore do Hive.

Observação

Os arquivos subjacentes que dão suporte a exibições materializadas podem incluir dados de tabelas upstream (incluindo possíveis informações de identificação pessoal) que não aparecem na definição de exibição materializada. Esses dados são adicionados automaticamente ao armazenamento subjacente para dar 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 upstream tabelas 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 a definição de uma exibição materializada inclua uma cláusula COUNT(DISTINCT field_a). Embora a definição de exibição materializada inclua apenas a cláusula de agregação COUNT DISTINCT, os arquivos subjacentes conterão uma lista dos valores reais de field_a.

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

Seu workspace pode conter pipelines que usam o Catálogo do Unity e o metastore do Hive herdado. 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 atualizados para usar o Unity Catalog. Para migrar um pipeline existente que grava no metastore do Hive, você deve criar um novo pipeline e reingerir dados da(s) fonte(s) de dados. Veja Crie um pipeline do Unity Catalog clonando um pipeline do metastore do Hive.

Os pipelines existentes que não usam o Catálogo do Unity não são afetados pela criação de novos pipelines configurados com o Catálogo do Unity. Esses pipelines continuam a persistir 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 de pipeline são suportadas por pipelines que utilizam o Unity Catalog. As interfaces Python e SQL têm suporte com pipelines que usam o Catálogo do Unity.

Tabelas inativas

Quando um pipeline é configurado para persistir dados no Catálogo do Unity, o pipeline gerencia o ciclo de vida e as permissões da tabela.

Tabelas podem ficar inativas se sua definição for removida de um pipeline. A próxima atualização de pipeline marca a exibição materializada correspondente ou a entrada da tabela de streaming como inativa.

Se você alterar o catálogo ou esquema padrão do pipeline e não usar nomes de tabela totalmente qualificados no código-fonte do pipeline, a próxima execução do pipeline criará a exibição materializada ou a tabela de streaming no novo catálogo ou esquema e a exibição materializada anterior ou a tabela de streaming no local antigo será marcada como inativa.

Você ainda pode consultar tabelas inativas, mas o pipeline não as atualiza mais. Para limpar exibições materializadas ou tabelas de streaming, explicitamente DROP a tabela. As tabelas inativas serão excluídas quando o pipeline for deletado.

  • Você pode recuperar tabelas descartadas dentro de 7 dias usando o UNDROP comando.
  • Para manter o comportamento herdado em que a exibição materializada ou a entrada da tabela de streaming é removida do Catálogo do Unity na próxima atualização de pipeline, defina a configuração "pipelines.dropInactiveTables": "true" do pipeline. 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 em 7 dias adicionando a exibição materializada ou a tabela de streaming de volta à definição do pipeline.

Excluir totalmente o pipeline (em vez de remover uma definição de tabela da origem do pipeline) também exclui todas as tabelas definidas nesse pipeline. A interface do usuário solicita que você confirme a exclusão de um pipeline.

Escrever tabelas no Catálogo do Unity a partir de um pipeline

Para gravar suas tabelas no Unity Catalog, você deve configurar seu pipeline para trabalhar com elas por meio do seu espaço de trabalho. Ao criar um pipeline, selecione o Catálogo do Unity em Opções de armazenamento, selecione um catálogo no menu de seleção Catálogo e depois um esquema existente ou insira o nome para um novo esquema no menu de seleção Esquema de destino. Para saber mais sobre catálogos do Catálogo do Unity, consulte O que são catálogos no Azure Databricks?. Para saber mais sobre esquemas no Catálogo do Unity, consulte O que são esquemas no Azure Databricks?.

Ingerir dados em um pipeline do Catálogo do Unity

Seu pipeline configurado para usar o Catálogo do Unity pode ler dados de:

  • Tabelas gerenciadas e externas do Unity Catalog, visualizações, visualizações materializadas e tabelas de streaming.
  • Exibições e tabelas de metastore do Hive.
  • Carregador Automático usando a função read_files() para ler de locais externos do Catálogo do Unity.
  • Apache Kafka e Amazon Kinesis.

Veja a seguir exemplos de leitura das tabelas do Catálogo do Unity e do metastore do Hive.

Ingestão em lote de uma tabela do Catálogo do Unity

SQL

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

Python

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

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

SQL

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

Python

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

Ingerir dados do metastore do Hive

Um pipeline que usa o Unity Catalog pode ler dados de tabelas do metastore do Hive usando o hive_metastore catalog:

SQL

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

Python

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

Ingerir dados do Carregador Automático

SQL

CREATE OR REFRESH STREAMING TABLE table_name
AS SELECT *
FROM STREAM read_files(
  "/path/to/uc/external/location",
  format => "json"
)

Python

@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 exibições materializadas

Por padrão, somente o proprietário do pipeline tem permissão para consultar conjuntos de dados criados pelo pipeline. Você pode conceder a outros usuários a capacidade de consultar uma tabela usando instruções GRANT e revogar o acesso à consulta usando instruções REVOKE. Para obter mais informações sobre privilégios no Unity Catalog, confira 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 de criação de tabela ou de exibição materializada

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

Exibir a linhagem de um pipeline

A linhagem para tabelas definidas em pipelines é visível no Gerenciador de Catálogos. A interface do usuário de linhagem do Explorador de Catálogos mostra as tabelas de upstream e de downstream para exibições materializadas ou tabelas de streaming em um pipeline habilitado para Catálogo do Unity. Para saber mais sobre a linhagem do Catálogo do Unity, consulte Exibir linhagem de dados usando o Catálogo do Unity.

Para uma exibição materializada ou tabela de streaming em um pipeline DLT habilitado para o Catálogo do Unity, a interface de linhagem do Catalog Explorer também será vinculada ao pipeline que produziu a exibição materializada ou tabela de streaming se o pipeline estiver acessível no espaço de trabalho atual.

Adicionar, alterar ou excluir dados em uma tabela de streaming

Você pode usar instruções de linguagem de manipulação de dados (DML), incluindo instruções de inserção, atualização, exclusão e mesclagem, para modificar tabelas de streaming publicadas no Catálogo do 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 sobre a Proteção de Dados (RGPD).

Observação

  • Não há suporte para instruções DML que modificam o esquema de tabela de uma tabela de streaming. Verifique se as instruções DML não tentam desenvolver o esquema da tabela.
  • Instruções DML que atualizam uma tabela de streaming só podem ser executadas em um cluster compartilhado do Catálogo do Unity ou em um SQL warehouse usando o Databricks Runtime 13.3 LTS e versões superiores.
  • Como o streaming requer fontes de dados que permitam apenas adições, se o seu processamento exigir streaming de uma tabela de streaming de origem com alterações (por exemplo, por comandos 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 tenha a restrição somente de acréscimo) como a tabela de destino.

Veja a seguir exemplos de instruções DML para modificar registros em uma tabela de streaming.

Exclua registros com uma ID específica:

DELETE FROM my_streaming_table WHERE id = 123;

Atualize registros com uma ID específica:

UPDATE my_streaming_table SET name = 'Jane Doe' WHERE id = 123;

Publicar tabelas com filtros de linha e máscaras de coluna

Os 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 de filtro é 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 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 por meio da instrução CREATE OR REFRESH.

Para obter uma sintaxe detalhada sobre como definir tabelas com filtros de linha e máscaras de coluna, consulte a referência da linguagem SQL do Pipeline e a referência de linguagem Python de Pipelines Declarativos do Lakeflow Spark.

Comportamento

Veja a seguir detalhes importantes ao usar filtros de linhas ou máscaras de colunas em um pipeline:

  • 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.
  • Consulta: 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 do usuário do invocador. Essa abordagem impõe controles de acesso e segurança de dados específicos do usuário com base no contexto do usuário atual.
  • Ao criar exibições materializadas sobre 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 origem 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 mais atualizados.

Observability

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 exibição materializada ou tabela de streaming. Essa funcionalidade permite que os usuários auditem e examinem as medidas de acesso e proteção de dados em exibições materializadas e tabelas de streaming.