Desenvolver pipeline declarativo LakeFlow
O desenvolvimento e o teste de código de pipeline são diferentes de outras cargas de trabalho do Apache Spark. Este artigo fornece uma visão geral da funcionalidade suportada, melhores práticas e considerações ao desenvolver código pipeline . Para obter mais recomendações e práticas recomendadas, consulte Aplicação de práticas recomendadas de desenvolvimento software e DevOps ao pipeline declarativo LakeFlow.
Você deve adicionar código-fonte a uma configuração pipeline para validar o código ou executar uma atualização. Consulte Configurar pipeline declarativo LakeFlow.
Quais arquivos são válidos para o código-fonte do pipeline?
O código do pipeline declarativo LakeFlow pode ser Python ou SQL. Você pode ter uma mistura de arquivos de código-fonte Python e SQL apoiando um único pipeline, mas cada arquivo pode conter apenas uma linguagem. Consulte Desenvolver código de pipeline com Python e Desenvolver código de pipeline com SQL.
Os arquivos de origem do pipeline são armazenados no seu workspace. Os arquivos de espaço de trabalho representam scripts Python ou SQL criados no editor LakeFlow Pipelines . Você também pode editar os arquivos localmente no seu IDE preferido e sincronizá-los com o workspace. Para obter informações sobre arquivos no workspace, consulte O que são arquivos workspace ?. Para obter informações sobre edição com o LakeFlow Pipelines Editor, consulte Desenvolver e depurar pipeline ETL com o LakeFlow Pipelines Editor. Para obter informações sobre a criação de código em um IDE local, consulte Desenvolver código de pipeline declarativo LakeFlow em seu ambiente de desenvolvimento local.
Se você desenvolver código Python como módulos ou bibliotecas, deverá instalar e importar o código e então chamar métodos de um arquivo Python configurado como código-fonte. Veja gerenciar dependências Python para o pipeline declarativo LakeFlow.
Se você precisar usar um comando SQL arbitrário em um Python Notebook, poderá usar o padrão de sintaxe spark.sql("<QUERY>")
para executar SQL como código Python .
As funções Unity Catalog permitem que você registre funções Python arbitrárias definidas pelo usuário para uso em SQL. Veja Funções definidas pelo usuário (UDFs) no Unity Catalog.
Visão geral do recurso de desenvolvimento de pipeline declarativo LakeFlow
O pipeline declarativo LakeFlow estende e aproveita muitos recursos Databricks e introduz novos recursos e conceitos. A tabela a seguir fornece uma breve visão geral dos conceitos e recursos que dão suporte ao desenvolvimento de código pipeline :
Recurso | Descrição |
---|---|
Modo de desenvolvimento | Executar o pipeline interativamente (escolhendo atualizar por meio do Editor LakeFlow Pipelines ) usará o modo de desenvolvimento. Novos pipelines são configurados para execução com o modo de desenvolvimento desativado quando executados automaticamente por meio de um programa ou gatilho automatizado. Veja Modo de desenvolvimento. |
Execução seca | Uma atualização de execução a seco verifica a exatidão do código-fonte do pipeline sem executar uma atualização em nenhuma tabela. Consulte Verificar se há erros em um pipeline sem esperar que as tabelas sejam atualizadas. |
Editor LakeFlow Pipelines | Arquivos Python e SQL configurados como código-fonte para o pipeline declarativo LakeFlow fornecem opções interativas para validar código e executar atualizações. Consulte Desenvolver e depurar pipeline ETL com o LakeFlow Pipelines Editor. |
Parâmetros | Aproveite os parâmetros no código-fonte e nas configurações de pipeline para simplificar os testes e a extensibilidade. Consulte Usar parâmetros com pipeline declarativo LakeFlow. |
Databricks Asset Bundles | Os pacotes ativo Databricks permitem que você mova configurações pipeline e código-fonte entre espaços de trabalho. Consulte Converter pipeline declarativo LakeFlow em um projeto de pacote ativo Databricks. |
Crie um conjunto de dados de amostra para desenvolvimento e teste
Databricks recomenda a criação de um conjunto de dados de desenvolvimento e teste para testar a lógica pipeline com dados esperados e registros potencialmente malformados ou corrompidos. Existem várias maneiras de criar conjuntos de dados que podem ser úteis para desenvolvimento e testes, incluindo as seguintes:
- Selecione um subconjunto de dados de um dataset de produção.
- Use dados anonimizados ou gerados artificialmente para fontes que contenham PII. Para ver um tutorial que usa a biblioteca
faker
para gerar dados para testes, consulte o tutorial: Construir um pipeline ETL usando captura de dados de alterações (CDC) com o pipeline declarativo LakeFlow. - Crie dados de teste com resultados bem definidos com base na lógica de transformações posteriores.
- Antecipe possíveis corrupções de dados, registros malformados e alterações de dados upstream criando registros que quebram as expectativas do esquema de dados.
Por exemplo, se você tiver um arquivo que define um dataset usando o seguinte código:
CREATE OR REFRESH STREAMING TABLE input_data
AS SELECT * FROM STREAM read_files(
"/production/data",
format => "json")
Você pode criar um dataset de amostra contendo um subconjunto de registros usando uma consulta como a seguinte:
CREATE OR REFRESH MATERIALIZED VIEW input_data AS
SELECT "2021/09/04" AS date, 22.4 as sensor_reading UNION ALL
SELECT "2021/09/05" AS date, 21.5 as sensor_reading
O exemplo a seguir demonstra a filtragem de dados publicados para criar um subconjunto de dados de produção para desenvolvimento ou teste:
CREATE OR REFRESH MATERIALIZED VIEW input_data AS SELECT * FROM prod.input_data WHERE date > current_date() - INTERVAL 1 DAY
Para usar esses diferentes conjuntos de dados, crie vários pipelines com o código-fonte implementando a lógica das transformações. Cada pipeline pode ler dados do dataset input_data
mas é configurado para incluir o arquivo que cria o dataset específico para o ambiente.
Como o conjunto de dados do pipeline declarativo LakeFlow processa dados?
A tabela a seguir descreve como a visualização materializada, as tabelas de transmissão e a visualização processam dados:
Tipo de dataset | Como os registros são processados por meio de consultas definidas? |
---|---|
Tabela de transmissão | Cada registro é processado exatamente uma vez. Isso pressupõe uma origem somente de acréscimo. |
Visualização materializada | Os registros são processados conforme necessário para retornar resultados precisos para o estado atual dos dados. A visão materializada deve ser usada para tarefas de processamento de dados, como transformações, agregações ou pré-computação de consultas lentas e computações usadas com frequência. Os resultados são armazenados em cache entre as atualizações. |
View | Os registros são processados sempre que a exibição é consultada. Use modos de exibição para transformações intermediárias e verificações de qualidade de dados que não devem ser publicadas em conjuntos de dados públicos. |
Declare seu primeiro conjunto de dados no pipeline declarativo LakeFlow
O pipeline declarativo LakeFlow introduz uma nova sintaxe para Python e SQL. Para aprender os conceitos básicos da sintaxe de pipeline, consulte Desenvolver código de pipeline com Python e Desenvolver código de pipeline com SQL.
O pipeline declarativo LakeFlow separa as definições do dataset do processamento de atualização, e a origem do pipeline declarativo LakeFlow não se destina à execução interativa.
Como você configura o pipeline declarativo LakeFlow ?
As configurações do pipeline declarativo LakeFlow se dividem em duas categorias amplas:
- Configurações que definem uma coleção de arquivos (conhecidos como código-fonte ) que usam a sintaxe de pipeline declarativa LakeFlow para declarar conjuntos de dados.
- Configurações que controlam a infraestrutura pipeline , o gerenciamento de dependências, como as atualizações são processadas e como as tabelas são salvas no workspace.
A maioria das configurações é opcional, mas algumas exigem atenção cuidadosa, especialmente ao configurar pipelines de produção. Isso inclui o seguinte:
- Para disponibilizar dados fora do pipeline, você deve declarar um esquema de destino para publicar no Hive metastore ou um catálogo de destino e um esquema de destino para publicar no Unity Catalog.
- As permissões de acesso aos dados são configuradas por meio do cluster usado para execução. Certifique-se de que seu cluster tenha permissões apropriadas configuradas para fonte de dados e o local de armazenamento de destino, se especificado.
Para obter detalhes sobre o uso de Python e SQL para escrever código-fonte para pipeline, consulte Referência da linguagem SQL do pipeline declarativoLakeFlow e Referência da linguagem Python do pipeline declarativoLakeFlow.
Para obter mais informações sobre configurações e definições pipeline , consulte Configurar pipeline declarativo LakeFlow.
implementou seu primeiro pipeline e acionou atualizações
Antes de processar dados com o pipeline declarativo LakeFlow , você deve configurar um pipeline. Depois que um pipeline é configurado, você pode acionar uma atualização para calcular resultados para cada dataset no seu pipeline. Para começar a usar o pipeline declarativo LakeFlow , consulte o tutorial: Construir um pipeline ETL usando captura de dados de alterações (CDC) com pipeline declarativo LakeFlow.
O que é uma atualização de pipeline?
Os pipelines implementam a infraestrutura e recalculam o estado dos dados quando você inicia uma atualização . Uma atualização executa as seguintes ações:
- Inicia um cluster com a configuração correta.
- Descobre todas as tabelas e visualizações definidas e verifica se há erros de análise, como nomes de colunas inválidos, dependências ausentes e erros de sintaxe.
- Cria ou atualiza tabelas e visualizações com os dados mais recentes disponíveis.
O pipeline pode ser executado continuamente ou em um programa, dependendo dos requisitos de custo e latência do seu caso de uso. Consulte a execução de uma atualização no pipeline declarativo LakeFlow.
Ingerir dados com o pipeline declarativo LakeFlow
O pipeline declarativo LakeFlow suporta todas as fontes de dados disponíveis no Databricks.
Databricks recomenda o uso de tabelas de transmissão para a maioria dos casos de uso de ingestão. Para arquivos que chegam ao armazenamento de objetos cloud , Databricks recomenda Auto Loader. Você pode ingerir dados diretamente com o pipeline declarativo LakeFlow a partir da maioria dos barramentos de mensagens.
Para obter mais informações sobre como configurar o acesso ao armazenamento cloud , consulte configuração de armazenamento em nuvem.
Para formatos não suportados pelo Auto Loader, você pode usar Python ou SQL para consultar qualquer formato suportado pelo Apache Spark. Consulte Carregar dados com pipeline declarativo LakeFlow.
Monitorar e aplicar a qualidade dos dados
Você pode usar expectativas para especificar controles de qualidade de dados sobre o conteúdo de um dataset. Ao contrário de uma restrição CHECK
em um banco de dados tradicional que impede a adição de quaisquer registros que não atendam à restrição, as expectativas fornecem flexibilidade ao processar dados que não atendem aos requisitos de qualidade de dados. Essa flexibilidade permite que você processe e armazene dados que você espera que sejam confusos e dados que devem atender a requisitos de qualidade rigorosos. Veja gerenciar a qualidade dos dados com expectativas pipeline.
Como o pipeline declarativo LakeFlow e Delta Lake estão relacionados?
O pipeline declarativo LakeFlow estende a funcionalidade do Delta Lake. Como as tabelas criadas e gerenciadas pelo pipeline declarativo LakeFlow são tabelas Delta , elas têm as mesmas garantias e recursos fornecidos pelo Delta Lake. Veja o que é Delta Lake no Databricks?.
O pipeline declarativo LakeFlow adiciona diversas propriedades de tabela além das muitas propriedades de tabela que podem ser definidas no Delta Lake. Consulte Referência de propriedades do pipeline declarativoLakeFlow e Referência de propriedades da tabelaDelta.
Como as tabelas são criadas e gerenciadas pelo pipeline declarativo LakeFlow
Databricks gerencia automaticamente tabelas criadas com o pipeline declarativo LakeFlow , determinando como as atualizações precisam ser processadas para compute corretamente o estado atual de uma tabela e executando uma série de tarefas de manutenção e otimização.
Para a maioria das operações, você deve permitir que o pipeline declarativo LakeFlow processe todas as atualizações, inserções e exclusões em uma tabela de destino. Para obter detalhes e limitações, consulte Manter exclusões ou atualizações manuais.
Tarefa de manutenção realizada pelo pipeline declarativo LakeFlow
O pipeline declarativo LakeFlow executa tarefas de manutenção em uma cadência ideal usando otimização preditiva. A manutenção pode melhorar o desempenho da consulta e reduzir custos removendo versões antigas de tabelas. Isso inclui operações completas OPTIMIZE e vacuum . As tarefas de manutenção são executadas em um programa decidido pela otimização preditiva e somente se uma atualização pipeline tiver sido executada desde a manutenção anterior.
Para entender com que frequência a otimização preditiva é executada e para entender os custos de manutenção, consulte Referência da tabela do sistema de otimização preditiva.
Limitações
Para obter uma lista de limitações, consulte Limitações do pipeline declarativoLakeFlow.
Para obter uma lista de requisitos e limitações específicos ao uso do pipeline declarativo LakeFlow com Unity Catalog, consulte Usar Unity Catalog com seu pipeline declarativo LakeFlow
Recurso adicional
- O pipeline declarativo LakeFlow tem suporte total na API REST Databricks . Consulte APIde pipeline declarativaLakeFlow.
- Para configurações pipeline e tabela, consulte Referência de propriedades de pipeline declarativasLakeFlow.
- Referência de linguagem SQL do pipeline declarativoLakeFlow.
- Referência da linguagem Python do pipeline declarativoLakeFlow.