Transformar dados
Este artigo fornece uma introdução e uma visão geral da transformação de dados com o Azure Databricks. Transformar dados, ou prepará-los, é uma etapa fundamental em todas as cargas de trabalho de engenharia, análise e ML de dados.
Os padrões e recomendações de exemplo neste artigo concentram-se em trabalhar com tabelas lakehouse, que são apoiadas pelo Delta Lake. Como o Delta Lake fornece as garantias ACID de um lago Databricks, você pode observar um comportamento diferente ao trabalhar com dados em outros formatos ou sistemas de dados.
O Databricks recomenda a ingestão de dados em uma casa de lago em um estado bruto ou quase bruto e, em seguida, aplicar transformações e enriquecimento como uma etapa de processamento separada. Este padrão é conhecido como arquitetura medalhão. Veja O que é a arquitetura do medalhão lakehouse?.
Se você sabe que os dados que você precisa transformar ainda não foram carregados em uma casa de lago, consulte Ingerir dados em uma casa de lago Databricks. Se você estiver tentando encontrar dados do lakehouse para escrever transformações, consulte Descobrir dados.
Todas as transformações começam gravando uma consulta em lote ou streaming em uma fonte de dados. Se você não estiver familiarizado com a consulta de dados, consulte Consultar dados.
Depois de salvar os dados transformados em uma tabela Delta, você pode usar essa tabela como uma tabela de recursos para ML. Consulte Engenharia de recursos e serviço.
Nota
Os artigos aqui discutem as transformações no Azure Databricks. O Azure Databricks também suporta ligações a muitas plataformas comuns de preparação de dados. Consulte Conectar-se a parceiros de preparação de dados usando o Partner Connect.
Transformações de faísca vs. transformações de casas de lago
Este artigo concentra-se na definição de tranformações como elas se relacionam com o T em ETL ou ELT. O modelo de processamento Apache Spark também usa a palavra transformação de forma 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. Os exemplos incluem leitura de dados, junções, agregações e conversão de tipos.
- Ações: acionar a lógica de processamento para avaliar e produzir um resultado. Os exemplos incluem gravações, exibição ou visualização de resultados, cache manual ou obtenção da contagem de linhas.
O Apache Spark usa um modelo de execução preguiçoso, o que significa que nenhuma das lógicas definidas por uma coleção de operações é avaliada até que uma ação seja acionada. Este modelo tem uma implicação importante ao definir pipelines de processamento de dados: use apenas ações para guardar os resultados novamente numa 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 além daquelas já presentes no Apache Spark para garantir a execução ideal da lógica. Essas otimizações consideram todas as transformações desencadeadas por uma determinada ação de uma só vez e encontram o plano ideal com base no layout físico dos dados. O armazenamento manual em cache de dados ou o retorno de resultados de visualização em pipelines de produção pode interromper essas otimizações e levar a aumentos significativos no custo e na latência.
Portanto, podemos definir uma transformação lakehouse como qualquer coleção de operações aplicadas a uma ou mais tabelas lakehouse que resultem em uma nova tabela lakehouse. Observe que, embora transformações como junções e agregações sejam discutidas separadamente, você pode 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 streaming e processamento em lote?
Embora o streaming e o processamento em lote 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 inalteráveis como uma única operação.
O processamento de fluxo permite definir uma consulta em relação a um conjunto de dados ilimitado e em crescimento contínuo 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 Structured Streaming.
Você pode diferenciar comandos em lote do Apache Spark do Streaming estruturado examinando as operações de leitura e gravação, conforme mostrado na tabela a seguir:
Apache Spark | Transmissão em Fluxo Estruturada | |
---|---|---|
Ler | spark.read.load() |
spark.readStream.load() |
Escrever | spark.write.save() |
spark.writeStream.start() |
As visualizações materializadas geralmente estão em conformidade com as garantias de processamento em lote, embora as Delta Live Tables 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 procura processar esses resultados incrementalmente quando possível.
As tabelas de streaming sempre calculam os resultados de forma incremental. Como muitas fontes de dados de streaming retêm registros apenas por um período de horas ou dias, o modelo de processamento usado pelas tabelas de streaming pressupõe que cada lote de registros de uma fonte de dados seja processado apenas uma vez.
O Azure Databricks dá suporte ao uso de SQL para escrever consultas de streaming nos seguintes casos de uso:
- Definição de tabelas de streaming no Unity Catalog usando Databricks SQL.
- Definir o código-fonte para pipelines Delta Live Tables.
Nota
Você também pode declarar tabelas de streaming em Delta Live Tables usando o código Python Structured Streaming.
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 únicas, 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
Os padrões incrementais geralmente assumem que a fonte de dados é apenas anexa e tem um esquema estável. Os artigos a seguir fornecem detalhes sobre nuances para transformações incrementais em tabelas que sofrem atualizações, exclusões ou alterações de esquema:
- as APIs APPLY CHANGES: simplifique a captura de dados de alteração com o Delta Live Tables
- Usar o feed de dados de alteração do Delta Lake no Azure Databricks
- Atualizar esquema de tabela Delta Lake
- streaming de tabela Delta lê e grava
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 sua casa no lago, mas devido à sobrecarga com a gravação de arquivos e metadados no armazenamento de objetos em nuvem, a verdadeira latência em tempo real não pode ser alcançada para muitas cargas de trabalho que gravam em sumidouros Delta Lake.
Para aplicativos de streaming de latência extremamente baixa, a Databricks recomenda escolher sistemas de origem e coletor projetados para cargas de trabalho em tempo real, como o Kafka. Você pode usar o Azure Databricks para enriquecer dados, incluindo agregações, junções entre fluxos e unir dados de streaming com dados de dimensão que mudam lentamente armazenados na casa do lago.