Construção de um Data Pipeline ETL: Azure/Terraform e Databricks

Danilo Freitas
8 min readMay 31, 2023

--

Olá, comunidade!

Neste projeto irei apresentar a construção de um Data Pipeline com a utilização de algumas ferramentas incríveis: Terraform, Azure Data Factory, Databricks e Azure Data Lake Gen 2.

O principal objetivo deste projeto é por em prática essas ferramentas para a extração, transformação e carregamento (ETL) de uma base disponibilizado pelo governo federal da vacinação da COVID 19 (https://opendatasus.saude.gov.br/dataset/covid-19-vacinacao).

Data Pipeline

Visão geral da arquitetura

Partindo como base o consumo da base de dados publica da vacinação da COVID 19 (https://opendatasus.saude.gov.br/dataset/covid-19-vacinacao). A ingestão dos dados foi realizado pelo Azure Data Factory em formato CSV e carregados na Landing Zone do diretório da Azure Blob Storage (Data Lake Gen 2).

Todo o CSV depositado na Landing Zone foi tratado e carregado para as outras camadas (Processing e Curated Zone) no Azure Databricks. No notebook do Databricks foi definido primeiramente a montagem do Data Lake (necessário realizar alguns processo de permissões).

Os dados CSV da Landing Zone foram transformados para o formato Parquet e carregados na Processing Zone, em seguida foram criadas algumas tabelas especificas para análise na Curated Zone (consumidas diretamente pelo Power BI).

Funções e objetivos das principais ferramentas utilizadas desta Pipeline

  • Azure Data Factory: Serviço bastante completo para o processamento de grande quantidade de dados. Entre as soluções está a de ingestão de dados, apresenta mais de 90 tipos diferentes de conectores;
  • Azure Blob Storage (Data Lake Gen 2): É a solução de Data Lake da Azure dedicada ao armazenamento e análise de Big Data compatível com o Hadoop HDFS;
  • Azure Databricks: Solução de cluster da Azure integrada ao Databricks;
  • Terraform: Solução de infraestrutura como código que integra as maiores Clouds do mercado, apresentando uma boa documentação;
  • Data Lake: Neste artigo apresento na prática a utilização do Data Lakehouse, demonstrando a suas características por meio de um laboratório. Recomendo!

Dados Antes da Transformação

Os dados disponibilizados pelo governo estão em formato CSV e são divididos por estado. Para esta análise foram utilizados os dados do estado de Alagoas que estão estruturados na seguinte maneira:

Dados Após a Transformação

Após a transformação os dados foram estruturados em tabelas no formato CSV para consumo no PowerBI.

Infraestrutura como Código com Terraform (Construção da Data Pipeline)

Neste etapa iremos construir juntos toda infraestrutura com o Terraform, que trará alguns benefícios para o projeto:

  • Maior velocidade/Escalabilidade: automação dos processos de implementação de recursos da nuvem;
  • Confiabilidade: maior facilidade de configurar e provisionar a infraestrutura com um grande time;
  • Versionamento: a infraestrutura como código possibilita desenvolver a data pipeline com o versionamento do código pelo git;
  • Controle do recursos: o código permite um maior controle dos recursos utilizados, otimizando o controle dos custos;
  • Migração entre Clouds: característica do Terraform, facilita a migração entre Clouds devida a sua documentação abrangente entre as principais clouds (https://registry.terraform.io/browse/providers) e a semelhança da sintaxe.

Mão na Massa (a documentação é seu melhor amigo!):

  1. Instalando Azure CLI

Antes de iniciar esse projeto é necessário a instalação do Azure CLI e a sua inicialização pelo AZ login.

Utilize o IDE de sua preferencia, recomendo o VS Code (instale os pacotes do Terraform) e o Pycharm.

2. Configurações iniciais (Backend remoto):

Primeira etapa de todo projeto no Terraform é a criação dos recursos de Backend, neles estão localizadas as dependências e as configurações.

Para que as configurações root do código Terraform esteja versionada para toda uma equipe é necessário a submissão dos arquivos de configuração para o Blob Storage da cloud. Por tanto, a primeira etapa do projeto é a criação de um Blob Storage e de Contêiner na Azure.

Após a criação do recurso será possível submeter o Backend para a Cloud, com a criação do primeiro arquivo (backend.tf ou main.tf), presente na documentação Terraform:

#Backend
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
}
backend "azurerm" {
resource_group_name = "vacinacaobackend"
storage_account_name = "vacinacaobackend"
container_name = "vacinacaobackend"
key = "terraform.tfstate"
}

}

# Configure the Microsoft Azure Provider
provider "azurerm" {
features {}

skip_provider_registration = "true"
subscription_id = var.subscription_id
tenant_id = var.tenant_id
}

Obs.: Recomendo a criação de um arquivo contendo as variáveis variables.tf e todas as informações dessas variáveis em outro arquivo terraform.tfvars como abaixo:

#Backend
variable "subscription_id" {
type = string
}

variable "tenant_id" {
type = string
}

variable "environment" {
type = string
}
#Backend
subscription_id =
tenant_id =
environment = "dev"

3. Submissão do Backend

Com a criação do arquivo backend.tf já é possível submeter com o comando terraform init no terminal. Observe que ao terminar o processo um novo arquivo será encontrado no contêiner criado.

4. Criação dos recursos

A criação de todos os recursos da Azure para o desenvolvimento deste projeto está bem documentado no Terraform e está disponível no meu GitHub :) => https://github.com/danilojpfreitas/DataPipeline-COVID19

Como exemplo, a documentação básica para a criação do Azure Data Factory é:

resource "azurerm_data_factory" "vacinacao" {
name = "vacinacaodatafactory"
location = azurerm_resource_group.vacinacao.location
resource_group_name = azurerm_resource_group.vacinacao.name

tags = {
environment = var.environment
}
}

5. Verificação dos arquivos Terraform

Para verificar se as features serão criadas corretamente é possível visualizar a criação, a modificação ou a remoção dos recursos pelo comando terraform plan.

6. Criação dos recursos

Para criar os recursos basta utilizar o comando terraform apply. Pelo terminal é possível verificar que todos os recursos foram criados, agora é so utilizar as features criadas para a Data Pipeline :)

7. Exclusão dos recursos

Após a utilização dos recursos é possível realizar a exclusão completa por meio do comando terraform destroy. Essa é uma das grandes vantagens em se utilizar o Terraform, já que esse processo evita o esquecimento da exclusão de recursos que podem provocar um aumento expressivo dos curtos (billing) ao final do mês (aquela surpresa indesejada por todos!).

Ingestão dos dados

Nesta etapa será apresentado o processo de ingestão dos dados com o Azure Data Factory da base de dados do governo ao o nosso Data Lake (Azure Data Lake Gen2).

A seguir apresento as etapas deste processo de ingestão:

  1. Criando os conectores do Portal openDataSUS

No Terraform todos os links relacionados a base de dados foram “linkados” com o Azure Data Factory, como nesse exemplo:

# Connection HTTP Server to Data Factory
resource "azurerm_data_factory_linked_custom_service" "Data01" {
name = "Data01"
data_factory_id = azurerm_data_factory.vacinacao.id
type = "HttpServer"

type_properties_json = <<JSON
{
"url": "",
"enableServerCertificateValidation": false,

"authenticationType": "Anonymous"
}
JSON

annotations = []

}

2. Ingerindo os dados na camada Landing pelo Azure Data Factory

Agora é a hora de configurar a ingestão dos dados para a nossa camada Landing:

3. Verificando dados na pasta Landing e liberando acesso para utilização no Azure Databricks

No contêiner Landing é possível visualizar que os CSVs chegaram em nosso Data Lake:

Agora é necessário autorizar acesso para que possamos transformar nossos dados através do Azure Databricks:

Modelagem/Transformação dos Dados (Azure Databricks)

Nesta etapa será efetuado por meio do Databricks a transformação dos dados CSVs para outras camadas (Processing e Curated).

Para isso será necessário da utilização do ambiente do Databricks da Azure que apresenta algumas etapas para o seu correto funcionamento:

  1. Criação do Cluster no Databricks

2. Importação do Notebook no Databricks

3. Configurações de autorizações da Azure para o Databricks

Todos os passos citados acima esta presente no repositório deste projeto no meu GitHub (https://github.com/danilojpfreitas/DataPipeline-COVID19).

4. Utilização do Notebook para a transformação/modelagem dos dados

Durante o processo de transformação os dados foram convertidos de CSV para o formato Parquet e depositados no Processing. Posteriormente, foram criadas novas tabelas para a Curated Zone.

Na Curated Zone foram criadas tabelas especificas da vacinação com algumas propriedades do Schema da cidade de Maceió para cada ano.

Todo o processo de transformação e modelagem dos dados realizado neste projeto estão disponível no notebook do meu GitHub.

Visualização dos Dados pelo Power BI

A última etapa deste projeto é chegada de nossos dados no Power BI. Para isso foi utilizado a opção de carregamento de dados do Azure Databricks do Power BI.

Com a obtenção das tabelas geradas na Curated Zone foi possível desenvolver um simples Dashboard com algumas métricas da vacinação da Covid 19 em Alagoas.

Conclusão

Como é poderosa a utilização das features da Azure para construção de uma pipeline completa ETL, né?!

Neste artigo foi possível observar na prática algumas features disponibilizadas pela Azure. Elas são completas e de fácil implementação, por meio delas foi possível ingerir os dados pelo Data Factory, transformar/modelar na Azure Databricks e carregar em nosso Data Lake Gen 2 em diferentes camadas (Landing, Processing e Curated). Por ser um produto da Microsoft apresenta uma integração fácil e rápida ao Power BI. Todas essas características permitiu construir esse Data Pipeline incrível!

Me siga no Linkedin para acompanhar novos artigos e dicas!

Dúvidas? Me manda mensagem pelo InBox do Linkedin.

--

--

Danilo Freitas

Data Engineer | Python | PySpark | SQL | Azure | Databricks