Compartilhar via


Transformar dados

Este artigo fornece uma introdução e visão geral da transformação de dados com o Azure Databricks. Transformar dados ou preparar dados é uma etapa fundamental em todas as cargas de trabalho de ML, análise e engenharia de dados.

Os padrões e recomendações de exemplo neste artigo se concentram em trabalhar com tabelas de lakehouse, que são apoiadas pelo Delta Lake. Como o Delta Lake fornece as garantias ACID de um lakehouse do Databricks, você talvez observe um comportamento diferente ao trabalhar com dados em outros formatos ou sistemas de dados.

O Databricks recomenda a ingestão de dados em um lakehouse em um estado bruto ou quase bruto e, em seguida, a aplicação de transformações e enriquecimento como uma etapa de processamento separada. Esse padrão é conhecido como a arquitetura medalhão. Confira O que é a arquitetura medallion do Lakehouse?.

Se você souber que os dados que você precisará transformar ainda não foram carregados em um lakehouse, consulte Ingestão de dados em um lakehouse do Databricks. Caso esteja tentando encontrar dados do lakehouse para gravar transformações, consulte Descobrir dados.

Todas as transformações se iniciam gravando um lote ou uma consulta de fluxo em uma fonte de dados. Caso não esteja familiarizado com a consulta de dados, consulte os Dados de consulta.

Após salvar dados transformados em uma tabela Delta, use essa tabela como uma tabela de recursos para ML. Consulte Engenharia de recursos e serviços.

Observação

Os artigos aqui abordam transformações no Azure Databricks. O Azure Databricks também dá suporte a conexões com muitas plataformas comuns de preparação de dados. Consulte Conectar-se a parceiros de preparação de dados por meio do Partner Connect.

Transformações do Spark versus transformações de lakehouse

Este artigo se concentra na definição de transformações conforme elas se relacionam com o T em ETL ou ELT. O modelo de processamento do Apache Spark também usa a transformação de palavras de uma maneira relacionada. Resumidamente: no Apache Spark, todas as operações são definidas como transformações ou ações.

  • Transformações: adicione alguma lógica de processamento ao plano. Exemplos incluem leitura de dados, junções, agregações e conversão de tipos.
  • Ações: disparar a lógica de processamento para avaliar e gerar um resultado. Exemplos incluem gravações, exibição ou pré-visualização de resultados, cache manual ou obtenção da contagem de linhas.

O Apache Spark usa um modelo de execução lento, o que significa que nenhuma lógica definida por uma coleção de operações é avaliada até que uma ação seja disparada. Esse modelo tem uma ramificação importante ao definir pipelines de processamento de dados: use apenas ações para salvar resultados em uma tabela de destino.

Como as ações representam um gargalo de processamento para otimizar a lógica, o Azure Databricks adicionou várias otimizações sobre as já presentes no Apache Spark para garantir a execução ideal da lógica. Essas otimizações consideram todas as transformações disparadas por uma determinada ação de uma só vez e encontram o plano ideal com base no layout físico dos dados. Armazenar dados em cache manualmente ou retornar resultados de pré-visualização em pipelines de produção, pode interromper essas otimizações e levar a aumentos significativos de custo e latência.

Portanto, podemos definir uma transformação de lakehouse para ser qualquer coleção de operações aplicadas a uma ou mais tabelas de lakehouse que resultam em uma nova tabela de lakehouse. Enquanto transformações como junções e agregações sejam discutidas separadamente, você poderá combinar muitos desses padrões em uma única etapa de processamento e confiar nos otimizadores no Azure Databricks para encontrar o plano mais eficiente.

Quais são as diferenças entre o fluxo e o processamento em lotes?

Embora o fluxo e o processamento em lotes usem grande parte da mesma sintaxe no Azure Databricks, cada um tem sua própria semântica específica.

O processamento em lote permite definir instruções explícitas para processar uma quantidade fixa de dados estáticos e não alterados como uma única operação.

O processamento de fluxo permite definir uma consulta em relação a um conjunto de dados não associado, que cresce continuamente e, em seguida, processar dados em lotes pequenos e incrementais.

As operações em lote no Azure Databricks usam o Spark SQL ou DataFrames, enquanto o processamento de fluxo aproveita o Fluxo Estruturado.

É possível diferenciar os comandos do Apache Spark em lote do Fluxo Estruturado examinando as operações de leitura e gravação, conforme mostrado na tabela a seguir:

Apache Spark Streaming estruturado
Leitura spark.read.load() spark.readStream.load()
Gravar spark.write.save() spark.writeStream.start()

As exibições materializadas geralmente estão em conformidade com as garantias de processamento em lotes, embora as Tabelas Dinâmicas Delta sejam usadas para calcular os resultados incrementalmente quando possível. Os resultados retornados por uma exibição materializada são sempre equivalentes à avaliação em lote da lógica, mas o Azure Databricks busca processar estes resultados incrementalmente quando possível.

As tabelas de fluxo sempre calculam os resultados de forma incremental. Como muitas fontes de dados de fluxo retêm apenas registros por um período de horas ou dias, o modelo de processamento usado pelas tabelas de fluxo pressupõe que cada lote de registros de uma fonte de dados só seja processado uma vez.

O Azure Databricks dá suporte ao uso do SQL para gravar consultas de fluxo nos seguintes casos de uso:

  • Definir tabelas de fluxo no Catálogo do Unity usando o SQL do Databricks.
  • Definir o código-fonte para pipelines de Tabelas Dinâmicas Delta.

Observação

Também é possível declarar tabelas de fluxo em Tabelas Dinâmicas Delta usando o código de Fluxo Estrutura do Python.

Transformações em lote

As transformações em lote operam em um conjunto bem definido de ativos de dados em um momento específico. As transformações em lote podem ser operações pontuais, mas geralmente fazem parte de trabalhos agendados ou pipelines que são executados regularmente para manter os sistemas de produção atualizados.

Transformações incrementais

Padrões incrementais geralmente pressupõem que a fonte de dados é somente acréscimo e tem um esquema estável. Os artigos a seguir fornecem detalhes sobre nuances para transformações incrementais em tabelas que experimentam atualizações, exclusões ou alterações de esquema:

Transformações em tempo real

O Delta Lake se destaca em fornecer acesso quase em tempo real a grandes quantidades de dados para todos os usuários e aplicativos que consultam seu lakehouse, mas devido à sobrecarga com a gravação de arquivos e metadados no armazenamento de objetos de nuvem, a verdadeira latência em tempo real não pode ser alcançada para muitas cargas de trabalho que gravam nos coletores do Delta Lake.

Para aplicativos de fluxo de latência extremamente baixa, o Databricks recomenda escolher sistemas de origem e coletor projetados para cargas de trabalho em tempo real, como Kafka. Use o Azure Databricks para enriquecer dados, incluindo agregações, junções entre fluxos e junção de dados de fluxo com dados de dimensão que mudam lentamente armazenados no lakehouse.