Usar o Unity Catalog com seus pipelines do Delta Live Tables

Importante

O suporte da Delta Live Tables para o Unity Catalog está em Visualização Pública.

O Databricks recomenda configurar pipelines do Delta Live Tables com o Catálogo do Unity.

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

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

Requisitos

Permissões necessárias para criar tabelas no Catálogo do Unity a partir de um pipeline do Delta Live Tables:

  • 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.
  • CREATE TABLE e USE SCHEMA privilégios no esquema de destino se o pipeline criar tabelas de streaming.
  • Se um esquema de destino não for especificado nas configurações do pipeline, você deverá ter privilégios CREATE MATERIALIZED VIEW ou CREATE TABLE em pelo menos um esquema no catálogo de destino.

Computação necessária para executar um pipeline habilitado para Catálogo do Unity:

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

  • SQL warehouses

  • Clusters de modo de acesso compartilhado no Databricks Runtime 13.3 LTS ou superior.

  • Clusters de modo de acesso de usuário único (ou "atribuídos"), se o controle de acesso refinado estiver habilitado no cluster de usuário único (ou seja, o cluster estiver em execução no Databricks Runtime 15.4 ou superior e a computação sem servidor estiver habilitada para o workspace). Para obter mais informações, consulte Controle de acesso refinado na computação de usuário único.

  • Clusters de modo de acesso de usuário único (ou "atribuído") de 13.3 LTS a 15.3, somente se o proprietário da tabela executar a consulta.

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

Limitações

Veja a seguir as limitações ao usar o Catálogo do Unity com o Delta Live Tables:

  • Por padrão, somente o proprietário do pipeline e os administradores do workspace podem visualizar os logs de driver do cluster que executa um pipeline habilitado para Catálogo do Unity. Para permitir que outros usuários acessem os logs de driver, consulte Permitir que usuários não administradores exibam os logs de driver de um pipeline habilitado para Catálogo do Unity.

  • Os pipelines existentes que usam o metastore do Hive não podem ser atualizados para usar o Catálogo do Unity. Para migrar um pipeline existente que grava no metastore do Hive, você deve criar um pipeline e ingerir novamente os dados das fontes de dados.

  • Você não pode 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. Confira Atualizar para herança de privilégios.

  • Não há suporte para JARs. Somente bibliotecas Python de terceiros são suportadas. Confira Gerenciar dependências do Python para pipelines do Delta Live Tables.

  • Não há suporte para consultas de linguagem de manipulação de dados (DML) que modificam o esquema de uma tabela de streaming.

  • Uma exibição materializada criada em um pipeline do Delta Live Tables não pode ser usada como uma fonte de streaming fora desse pipeline, por exemplo, em outro pipeline ou em um notebook downstream.

  • Se um pipeline for publicado em um esquema com um local de armazenamento gerenciado, o esquema poderá ser alterado em uma atualização subsequente, mas somente se o esquema atualizado usar o mesmo local de armazenamento que o esquema especificado anteriormente.

  • As tabelas são armazenadas no local de armazenamento do esquema de destino. 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 tabelas de streaming ou exibições materializadas.

  • Não há suporte para a propriedade LOCATION ao definir uma tabela.

  • Os pipelines habilitados para Catálogo do Unity não podem publicar no metastore do Hive.

  • O suporte a UDF do Python está em Visualização Pública.

  • Não é possível usar o Compartilhamento Delta com uma exibição materializada do Delta Live Tables ou uma tabela de streaming publicada no Catálogo do Unity.

  • Você não pode usar a event_logfunção com valor de tabela em um pipeline ou consulta para acessar os logs de eventos de vários pipelines.

  • Não é possível compartilhar uma exibição criada sobre a event_logfunção com valor de tabela com outros usuários.

  • Não há suporte para clusters de nó único com pipelines habilitados para Catálogo do Unity. Como o Delta Live Tables pode criar um cluster de nó único para executar pipelines menores, o pipeline pode falhar com uma mensagem de erro referenciando single-node mode. Se isso ocorrer, especifique pelo menos um trabalhador ao configurar a computação. Consulte Configurar a computação para um pipeline do Delta Live Tables.

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 uma definição de exibição materializada inclua uma COUNT(DISTINCT field_a) cláusula. 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 o metastore do Hive e os pipelines do Catálogo do Unity juntos?

Seu workspace pode conter pipelines que usam o Catálogo do Unity e o metastore herdado do Hive. No entanto, um único pipeline não pode gravar no metastore do Hive e no Catálogo do Unity. Os pipelines existentes que gravam no metastore do Hive não podem ser atualizados para usar o Catálogo do Unity.

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 do Delta Live Tables têm suporte com pipelines que usam o Catálogo do Unity. As interfaces Python e SQL têm suporte com pipelines que usam o Catálogo do Unity.

Alterações na funcionalidade existente

Quando o Delta Live Tables é configurado para persistir dados no Catálogo do Unity, o ciclo de vida da tabela é gerenciado pelo pipeline do Delta Live Tables. Como o pipeline gerencia o ciclo de vida da tabela e as permissões:

  • Quando uma tabela é removida da definição de pipeline do Delta Live Tables, a exibição materializada correspondente ou a entrada da tabela de streaming é removida do Catálogo do Unity na próxima atualização de 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 adicionando a exibição materializada ou >st de volta à definição do pipeline.
  • A exclusão do pipeline do Delta Live Tables resulta na exclusão de todas as tabelas definidas nesse pipeline. Devido a essa alteração, a interface do usuário do Delta Live Tables é atualizada para solicitar que você confirme a exclusão de um pipeline.
  • As tabelas de suporte internas, incluindo aquelas usadas para oferecer suporte APPLY CHANGES INTOao , não são diretamente acessíveis pelos usuários.

Gravar tabelas no Catálogo do Unity de um pipeline do Delta Live Tables

Observação

Se você não selecionar um catálogo e esquema de destino para um pipeline, as tabelas não serão publicadas no Unity Catalog e só poderão ser acessadas por consultas no mesmo pipeline.

Para gravar suas tabelas no Unity Catalog, ao criar um pipeline, selecione o Unity Catalog 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 Unity Catalog

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

  • Tabelas gerenciadas e externas do Catálogo do Unity, exibições, exibiçõ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

@dlt.table
def table_name():
  return spark.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

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

Ingerir dados do metastore do Hive

Um pipeline que usa o Catálogo do Unity pode ler dados de tabelas de metastore do Hive usando o 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.table("hive_metastore.some_schema.table")

Ingerir dados do Carregador Automático

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}")
 )

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 dar 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 de tabelas em um pipeline do Delta Live Tables é visível no Explorador de Catálogos. A interface do usuário de linhagem do Explorador de Catálogos mostra as tabelas upstream e 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 Capturar e exibir linhagem de dados usando o Catálogo do Unity.

Para uma exibição materializada ou uma tabela de streaming em um pipeline do Delta Live Tables habilitado para Catálogo do Unity, a interface do usuário de linhagem do Explorador de Catálogos também será vinculada ao pipeline que produziu a exibição materializada ou a tabela de streaming se o pipeline estiver acessível a partir do workspace atual.

Adicionar, alterar ou excluir dados em uma tabela de streaming

Você pode usar instruções DML (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 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 GDPR (Regulamento Geral sobre a Proteção de Dados).

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 exige 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 somente 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

Importante

Esse recurso está em uma versão prévia.

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 Filtrar dados confidenciais da tabela usando filtros de linha e máscaras de coluna.

Gerenciar 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 sintaxe detalhada sobre a definição de tabelas com filtros de linha e máscaras de coluna, consulte Referência de linguagem SQL do Delta Live Tables e Referência de linguagem Python do Delta Live Tables.

Comportamento

Veja a seguir detalhes importantes ao usar filtros de linha ou máscaras de coluna em pipelines do Delta Live Tables:

  • 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 que fez a chamada. Essa abordagem impõe controles de acesso e segurança de dados específicos do usuário com base no contexto atual do usuário.
  • 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.

Observabilidade

Use DESCRIBE EXTENDED, INFORMATION_SCHEMAou o Explorador de Catálogos 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.