transformação de dados

Este artigo apresenta uma introdução e uma visão geral da transformação de dados com o site Databricks. Transformar dados ou preparar dados é key o passo em todas as cargas de trabalho de engenharia de dados, analítica e ML.

Os padrões de exemplo e as recomendações deste artigo se concentram em trabalhar com as tabelas lakehouse, que são apoiadas por Delta Lake. Como o site Delta Lake fornece as garantias ACID de um site Databricks lakehouse, o senhor poderá observar um comportamento diferente ao trabalhar com dados em outros formatos ou sistemas de dados.

Databricks recomenda a ingestão de dados em um site lakehouse em um estado bruto ou quase bruto e, em seguida, a aplicação de transformações e enriquecimento como um passo a passo de processamento separado. Esse padrão é conhecido como arquitetura de medalhão. Veja O que é a arquitetura medallion lakehouse?

Se o senhor sabe que os dados que precisa transformar ainda não foram carregados em um lakehouse, consulte Ingerir dados em um lakehouse da Databricks. Se o senhor estiver tentando encontrar dados de lakehouse para escrever transformações, consulte Descobrir dados.

Todas as transformações começam com a gravação de uma consulta de lotes ou de transmissão em uma fonte de dados. Se o senhor não estiver familiarizado com a consulta de dados, consulte Consultar dados.

Depois de salvar os dados transformados em uma tabela Delta, o senhor pode usar essa tabela como uma tabela de recurso para ML. Consulte O que é um repositório de recursos?

Observação

Os artigos aqui discutem transformações em Databricks. A Databricks também oferece suporte a conexões com muitas plataformas comuns de preparação de dados. Consulte Conectar-se a parceiros de preparação de dados usando o Partner Connect.

Spark transformações vs. lakehouse transformações

Este artigo se concentra na definição de transformações relacionadas ao T em ETL ou ELT. O modelo de processamento Apache Spark também usa a palavra transformações de forma relacionada. Resumidamente: no Apache Spark, todas as operações são definidas como transformações ou ações.

  • transformações: adicionar alguma lógica de processamento ao plano. Os exemplos incluem leitura de dados, junção, agregações e conversão de tipos.

  • Ações: acionam a lógica de processamento para avaliar e gerar um resultado. Os exemplos incluem gravações, exibição ou visualização de resultados, armazenamento em 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 lógica definida por uma coleção de operações é avaliada até que uma ação seja acionada. Esse modelo tem uma ramificação importante ao definir o pipeline de processamento de dados: use apenas ações para salvar os resultados em uma tabela de destino.

Como as ações representam um gargalo de processamento para otimizar a lógica, a 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 acionadas por uma determinada ação de uma só vez e encontram o plano ideal com base na disposição física dos dados. O armazenamento manual de dados em cache ou o retorno de resultados de visualização no pipeline de produção podem interromper essas otimizações e levar a aumentos significativos de custo e latência.

Portanto, podemos definir uma lakehouse transformações como qualquer conjunto 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, o senhor pode combinar muitos desses padrões em um único processamento e confiar nos otimizadores do site Databricks para encontrar o plano mais eficiente.

Quais são as diferenças entre transmissão e processamento de lotes?

Embora a transmissão e o processamento de lotes usem muito da mesma sintaxe em Databricks, cada um tem sua própria semântica específica.

O processamento de lotes permite que o senhor defina instruções explícitas para processar uma quantidade fixa de dados estáticos e imutáveis como uma única operação.

O processamento de transmissão permite que o senhor defina uma consulta em um dataset ilimitado e em crescimento contínuo e, em seguida, processe os dados em lotes pequenos e incrementais.

Muitas operações em Databricks usam Spark SQL ou DataFrames, enquanto o processamento de transmissão aproveita a transmissão estruturada.

O senhor pode diferenciar lotes Apache Spark comando da transmissão estruturada observando as operações de leitura e gravação, conforme mostrado na tabela a seguir:

Apache Spark

Transmissão estruturada

Ler

spark.read.load()

spark.readStream.load()

Gravar

spark.write.save()

spark.writeStream.start()

A visualização materializada geralmente está em conformidade com as garantias de processamento de lotes, embora o site Delta Live Tables seja usado para calcular os resultados de forma incremental quando possível. Os resultados retornados por um view materializado são sempre equivalentes à avaliação de lotes de lógica, mas o Databricks procura processar esses resultados de forma incremental quando possível.

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

Databricks suporta o uso do site SQL para escrever consultas de transmissão nos seguintes casos de uso:

  • Definição de tabelas de transmissão em Unity Catalog usando Databricks SQL.

  • Definição do código-fonte para o pipeline Delta Live Tables.

Observação

O senhor também pode declarar tabelas de transmissão em Delta Live Tables usando o código Python transmissão estructurada.

lotes transformações

Muitas transformações operam em um conjunto bem definido de dados ativos em um ponto específico no tempo. Muitas transformações podem ser operações únicas, mas geralmente fazem parte de um fluxo de trabalho ou pipeline programado que é executado regularmente para manter os sistemas de produção atualizados.

Transformações incrementais

Em geral, os padrões incrementais pressupõem que a fonte de dados é somente de anexo e tem um esquema estável. Os artigos a seguir fornecem detalhes sobre as nuances das transformações incrementais em tabelas que sofrem atualizações, exclusões ou alterações de esquema:

tempo real transformações

Delta Lake é excelente no fornecimento de acesso near tempo real a grandes quantidades de dados para todos os usuários e aplicativos que consultam o site lakehouse, mas, devido à sobrecarga de gravação de arquivos e metadados no armazenamento de objetos cloud, a latência true tempo real não pode ser alcançada para muitas cargas de trabalho que gravam em Delta Lake sinks.

Para aplicativos de transmissão de latência extremamente baixa, o site Databricks recomenda a escolha de sistemas de origem e de destino projetados para cargas de trabalho de tempo real, como o Kafka. O senhor pode usar o site Databricks para enriquecer dados, incluindo agregações, junção entre transmissões e junção de dados de transmissão com dados de dimensões que mudam lentamente (SCD) armazenados no site lakehouse.