Partilhar via


Desenvolver Oleodutos Declarativos Lakeflow Spark

O desenvolvimento e teste do código de pipeline difere de outras cargas de trabalho do Apache Spark. Este artigo fornece uma visão geral da funcionalidade suportada, práticas recomendadas e considerações ao desenvolver código de pipeline. Para obter mais recomendações e melhores práticas, consulte Aplicar as melhores práticas de desenvolvimento de software e DevOps em pipelines.

Observação

Você deve adicionar código-fonte a uma configuração de pipeline para validar o código ou executar uma atualização. Consulte Configurar pipelines.

Quais arquivos são válidos para o código-fonte do pipeline?

O código do pipeline 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 só pode conter uma linguagem. Veja Desenvolver código de pipeline com Python e Desenvolver código Lakeflow Spark Declarative Pipelines com SQL.

Os arquivos de origem para pipelines são armazenados em seu espaço de trabalho. Os arquivos de espaço de trabalho representam scripts Python ou SQL criados no Lakeflow Pipelines Editor. Você também pode editar os arquivos localmente em seu IDE preferido e sincronizar com o espaço de trabalho. Para obter informações sobre arquivos no espaço de trabalho, consulte O que são arquivos de espaço de trabalho?. Para obter informações sobre como editar com o Lakeflow Pipelines Editor, consulte Desenvolver e depurar pipelines 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 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, em seguida, chamar métodos de um arquivo Python configurado como código-fonte. Consulte Gerenciar dependências Python para pipelines.

Observação

Se você precisar usar comandos SQL arbitrários em um bloco de anotações Python, poderá usar o padrão de sintaxe spark.sql("<QUERY>") para executar SQL como código Python.

As funções do Unity Catalog permitem que você registre funções arbitrárias definidas pelo usuário do Python para uso em SQL. Consulte Funções definidas pelo usuário (UDFs) no Catálogo Unity.

Visão geral das funcionalidades de desenvolvimento de pipeline

Os pipelines estendem e aproveitam muitos recursos de desenvolvimento do Azure Databricks e introduzem novos recursos e conceitos. A tabela a seguir fornece uma breve visão geral dos conceitos e recursos que suportam o desenvolvimento de código de pipeline:

Característica Description
Modo de desenvolvimento A execução de pipelines interativamente (optando por atualizar através do Lakeflow Pipelines Editor) usará o modo de desenvolvimento. Novos pipelines, quando executados automaticamente por meio de um agendamento ou gatilho automatizado, funcionam com o modo de desenvolvimento desligado. Consulte Modo de desenvolvimento.
Funcionamento a seco Uma atualização de execução seca verifica a correção do código-fonte do pipeline sem executar uma atualização em nenhuma tabela. Consulte Verifique se há erros num pipeline sem esperar que as tabelas sejam atualizadas.
Editor de oleodutos Lakeflow Os arquivos Python e SQL configurados como código-fonte para pipelines fornecem opções interativas para validar o código e executar atualizações. Consulte Desenvolver e depurar pipelines ETL com o Lakeflow Pipelines Editor.
Parâmetros Aproveite os parâmetros nas configurações de código-fonte e pipeline para simplificar os testes e a extensibilidade. Consulte Usar parâmetros com pipelines.
Pacotes de Ativos da Databricks Os pacotes de ativos Databricks permitem mover configurações de pipeline e código-fonte entre espaços de trabalho. Consulte Converter um pipeline em um projeto Databricks Asset Bundle.

Criar conjuntos de dados de exemplo para desenvolvimento e teste

O Databricks recomenda a criação de conjuntos de dados de desenvolvimento e teste para testar a lógica do pipeline com dados esperados e registros potencialmente malformados ou corrompidos. Há várias maneiras de criar conjuntos de dados que podem ser úteis para desenvolvimento e teste, incluindo o seguinte:

  • Selecione um subconjunto de dados de um conjunto de dados de produção.
  • Use dados anonimizados ou gerados artificialmente para fontes que contenham PII. Para ver um tutorial que usa a faker biblioteca para gerar dados para teste, consulte Tutorial: Criar um pipeline ETL usando a captura de dados de alteração.
  • Crie dados de teste com resultados bem definidos com base na lógica de transformação downstream.
  • Antecipe possíveis corrupção 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 conjunto de dados 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 conjunto de dados de exemplo contendo um subconjunto dos 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 dos 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 de transformação. Cada pipeline pode ler dados do conjunto de dados input_data. Está configurado para incluir o ficheiro que gera o conjunto de dados específico para o ambiente.

Como os conjuntos de dados de pipeline processam dados?

A tabela a seguir descreve como visões materializadas, tabelas de streaming e visões processam dados.

Tipo de conjunto de dados Como os registros são processados por meio de consultas definidas?
Tabela de transmissão Cada registo é processado exatamente uma vez. Isso pressupõe uma fonte que apenas permite acréscimos.
Visão materializada Os registros são processados conforme necessário para retornar resultados precisos para o estado atual dos dados. As visualizações materializadas devem ser usadas para tarefas de processamento de dados, como transformações, agregações ou consultas lentas de pré-computação e cálculos usados com frequência. Os resultados são armazenados em cache entre as atualizações.
View Os registos são processados sempre que a visualização é consultada. Use exibições 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 seus primeiros conjuntos de dados em pipelines

Os pipelines introduzem uma nova sintaxe para Python e SQL. Para aprender o básico da sintaxe de pipelines, consulte Desenvolver código de pipeline com Python e Desenvolver código Lakeflow Spark Declarative Pipelines com SQL.

Observação

Os pipelines separam as definições de conjunto de dados do processamento de atualização, e a origem do pipeline não se destina à execução interativa.

Como configurar os pipelines?

As configurações de um pipeline se enquadram em duas grandes categorias:

  1. Configurações que definem uma coleção de arquivos (conhecidos como código-fonte) que usam sintaxe de pipeline para declarar conjuntos de dados.
  2. Configurações que controlam a infraestrutura do pipeline, o gerenciamento de dependências, como as atualizações são processadas e como as tabelas são salvas no espaço de trabalho.

A maioria das configurações é opcional, mas algumas exigem atenção cuidadosa, especialmente ao configurar pipelines de produção. Estes incluem o seguinte:

  • Para disponibilizar dados fora do pipeline, deve declarar um esquema de destino para publicar no metastore do Hive ou um catálogo de destino e um esquema de destino para publicar no Unity Catalog.
  • As permissões de acesso a dados são configuradas através do cluster usado para execução. Verifique se o cluster tem as permissões apropriadas configuradas para as fontes de dados e para o local de armazenamento de destino , se especificado.

Para obter detalhes sobre como usar Python e SQL para escrever código-fonte para pipelines, consulte Referência da linguagem Pipeline SQL e Referência da linguagem Python Lakeflow Spark Declarative Pipelines.

Para obter mais informações sobre definições e configurações de pipeline, consulte Configurar pipelines.

Implante seu primeiro pipeline e acione atualizações

Para processar dados com SDP, configure um pipeline. Depois que um pipeline é configurado, você pode disparar uma atualização para calcular os resultados de cada conjunto de dados em seu pipeline. Para começar a usar pipelines, consulte Tutorial: Criar um pipeline ETL usando a captura de dados de alteração.

O que é uma atualização de pipeline?

Os pipelines implantam a infraestrutura e recalculam o estado dos dados quando se desencadeia uma atualização. Uma atualização faz o seguinte:

  • Inicia um cluster com a configuração correta.
  • Descobre todas as tabelas e exibiçõ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 exibições com os dados mais recentes disponíveis.

Os pipelines podem ser executados continuamente ou em um cronograma, dependendo dos requisitos de custo e latência do seu caso de uso. Consulte Executar uma atualização de pipeline.

Ingerir dados com pipelines

Os pipelines dão suporte a todas as fontes de dados disponíveis no Azure Databricks.

O Databricks recomenda o uso de tabelas de streaming para a maioria dos casos de uso no processo de ingestão. Para arquivos que chegam no armazenamento de objetos na nuvem, a Databricks recomenda o Auto Loader. Você pode integrar dados diretamente através de um pipeline da maioria dos barramentos de mensagens.

Para obter mais informações sobre como configurar o acesso ao armazenamento em nuvem, 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 em pipelines.

Monitorar e impor a qualidade dos dados

Você pode usar expectativas para especificar controles de qualidade de dados no conteúdo de um conjunto de dados. Ao contrário de uma restrição de CHECK em um banco de dados tradicional, que impede a adição de registros que falham na restrição, as expectativas fornecem flexibilidade ao processar dados que falham nos 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 rigorosos requisitos de qualidade. Consulte Gerir a qualidade dos dados com as expectativas do fluxo de dados.

SDP estende a funcionalidade do Delta Lake. Como as tabelas criadas e geridas por pipelines são tabelas Delta, elas têm as mesmas garantias e funcionalidades fornecidas pelo Delta Lake. Consulte O que é Delta Lake no Azure Databricks?.

Os pipelines adicionam diversas propriedades de tabela, além das muitas propriedades de tabela que podem ser definidas no Delta Lake. Consulte Referência de propriedades de pipeline e Referência de propriedades de tabela Delta.

Como as tabelas são criadas e geridas pelos pipelines

O Azure Databricks gerencia automaticamente tabelas criadas por pipelines, determinando como as atualizações precisam ser processadas para calcular corretamente o estado atual de uma tabela e executando várias tarefas de manutenção e otimização.

Para a maioria das operações, deve-se permitir que o pipeline processe todas as atualizações, inserções e exclusões numa tabela alvo. Para obter detalhes e limitações, consulte Manter exclusões ou atualizações manuais.

Tarefas de manutenção executadas por pipelines

O Azure Databricks executa tarefas de manutenção em tabelas gerenciadas por pipelines em uma cadência ideal usando otimização preditiva. A manutenção pode melhorar o desempenho da consulta e reduzir os custos removendo versões antigas das tabelas. Isso inclui operações completas OPTIMIZE e VACUUM. As tarefas de manutenção são executadas em um cronograma decidido pela otimização preditiva e somente se uma atualização de pipeline tiver sido executada desde a manutenção anterior.

Para entender com que frequência a otimização preditiva é executada e 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 de pipeline.

Para obter uma lista de requisitos e limitações específicos para o uso de pipelines com o Unity Catalog, consulte Usar o Unity Catalog com pipelines

Recursos adicionais