Compartilhar via


Desenvolver Pipelines Declarativos do Lakeflow Spark

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

Observação

Você deve adicionar o 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 combinação de arquivos de código-fonte python e SQL que dão suporte a um único pipeline, mas cada arquivo só pode conter um idioma. Consulte Desenvolver código de pipeline com Python e Desenvolver código de Pipelines Declarativos do Lakeflow Spark com SQL.

Os arquivos de origem para pipelines são armazenados em seu espaço de trabalho. Os arquivos de workspace representam scripts Python ou SQL criados no Editor do Lakeflow Pipelines. Você também pode editar os arquivos localmente em seu IDE preferido e sincronizar com o workspace. Para obter informações sobre arquivos no workspace, consulte O que são arquivos de workspace?. Para obter informações sobre edição com o Editor do Lakeflow Pipelines, consulte Desenvolver e depurar pipelines de ETL com o Editor do Lakeflow Pipelines. Para obter informações sobre como criar 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 do Python para pipelines.

Observação

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

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

Visão geral das funcionalidades de desenvolvimento de pipelines

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 de conceitos e recursos que dão suporte ao desenvolvimento de código de pipeline:

Característica Description
Modo de desenvolvimento Executar pipelines de forma interativa (ao escolher atualizar por meio do Editor do Lakeflow Pipelines) utilizará o modo de desenvolvimento. Novos pipelines são executados com o modo de desenvolvimento desativado ao serem executados automaticamente por meio de um agendamento ou gatilho automatizado. Consulte o modo de desenvolvimento.
Execução 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. Confira Verificar se há erros em um pipeline sem esperar a atualização das tabelas.
Editor de Pipelines do 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. Confira Desenvolver e depurar pipelines de ETL com o Editor do Lakeflow Pipelines.
Parâmetros Aproveite os parâmetros nas configurações de código-fonte e pipeline para simplificar o teste e a extensibilidade. Consulte Usar parâmetros com pipelines.
Pacotes de ativos do Databricks Os Pacotes de Ativos do Databricks permitem mover configurações de pipeline e código-fonte entre workspaces. Consulte Converter um pipeline em um projeto do Pacote de Ativos do Databricks.

Criar conjuntos de dados de exemplo para desenvolvimento e teste

O Databricks recomenda criar 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 anônimos ou gerados artificialmente para fontes que contêm PII. Para ver um tutorial que usa a faker biblioteca para gerar dados para teste, consulte Tutorial: Criar um pipeline de 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 dados corrompidos, 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 defina 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 conjuntos de dados diferentes, crie vários pipelines com o código-fonte implementando a lógica de transformação. Cada pipeline pode ler dados do input_data conjunto de dados, mas está configurado para incluir o arquivo que cria o conjunto de dados específico para o ambiente.

Como os conjuntos de dados de pipeline processam dados?

A tabela a seguir descreve como as exibições materializadas, as tabelas de streaming e as exibições processam dados:

Tipo de conjunto de dados Como os registros são processados por meio de consultas definidas?
Tabela de streaming Cada registro é processado exatamente uma vez. Isso pressupõe uma fonte somente acréscimo.
Visão materializada Os registros são processados conforme necessário para retornar resultados precisos para o estado de dados atual. As exibiçõ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 atualizações.
View Os registros 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 saber os conceitos básicos da sintaxe de pipeline, consulte Desenvolver código de pipeline com Python e Desenvolver código de Pipelines Declarativos do Lakeflow Spark com SQL.

Observação

Pipelines separam as definições de dados do processamento de atualização, e o código fonte do pipeline não se destina à execução interativa.

Como configurar os pipelines?

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

  1. Configurações que definem uma coleção de arquivos (conhecido como código-fonte) que usam a sintaxe de pipeline para declarar conjuntos de dados.
  2. Configurações que controlam a infraestrutura de 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. Estes incluem o seguinte:

  • Para disponibilizar dados fora do pipeline, você deve declarar um esquema de destino para publicar no metastore do Hive ou em um catálogo de destino e esquema de destino para publicar no Catálogo do Unity.
  • As permissões de acesso a dados são configuradas por meio do cluster usado para execução. Verifique se o cluster tem permissões apropriadas configuradas para fontes de dados e 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 a referência da linguagem SQL do Pipeline e a referência de linguagem Python do Lakeflow Spark Declarative Pipelines.

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

Implante seu primeiro pipeline e dispare 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 de ETL usando a captura de dados de alteração.

O que é uma atualização de pipeline?

Os pipelines implantam infraestrutura e recalculam o estado dos dados quando você inicia 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 coluna 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 conforme uma programação. Isso depende dos requisitos de custo e latência do seu caso de uso. Consulte Como 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 de ingestão. Para arquivos que chegam ao armazenamento de objetos de nuvem, o Databricks recomenda o Carregador Automático. É possível ingerir dados diretamente da maioria dos barramentos de mensagens usando um pipeline.

Para obter mais informações sobre como configurar o acesso ao armazenamento em nuvem, consulte a configuração do armazenamento em nuvem.

Para formatos sem suporte do Carregador Automático, você pode usar Python ou SQL para consultar qualquer formato compatível com o Apache Spark. Consulte Carregar dados em pipelines.

Monitorar e impor a qualidade dos dados

Você pode usar as expectativas para especificar controles de qualidade de dados no conteúdo de um conjunto de dados. Ao contrário de uma CHECK restrição 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 dos dados. Essa flexibilidade permite que você processe e armazene dados que você espera serem confusos e dados que devem atender a requisitos rigorosos de qualidade. Confira Gerenciar a qualidade dos dados com as expectativas do pipeline.

O SDP estende a funcionalidade do Delta Lake. Como as tabelas criadas e gerenciadas por pipelines são tabelas Delta, elas possuem as mesmas garantias e recursos que o Delta Lake oferece. Veja o que é o Delta Lake no Azure Databricks?.

Os pipelines adicionam várias propriedades de tabela, além das muitas propriedades de tabela que se podem definir no Delta Lake. Consulte referência de propriedades do Pipeline e referência de propriedades da tabela Delta.

Como as tabelas são criadas e gerenciadas 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 executar várias tarefas de manutenção e otimização.

Para a maioria das operações, você deve permitir que o pipeline processe todas as atualizações, inserções e exclusões em uma tabela de destino. Para obter detalhes e limitações, consulte Reter exclusões ou atualizações manuais.

Tarefas de manutenção executadas em pipelines

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

Para entender a frequência com que a otimização preditiva é executada e entender os custos de manutenção, consulte a referência da tabela do sistema de otimização preditiva.

Limitações

Para obter uma lista de limitações, consulte Limitações do Pipeline.

Para obter uma lista de requisitos e limitações específicos ao uso de pipelines com o Catálogo do Unity, consulte a página Usar o Catálogo do Unity com pipelines

Recursos adicionais