Explicando scripts e recursos criados - AnselmoBorges/projetorescue GitHub Wiki

Agora que temos tudo que precisamos pra começar, vamos dar uma recaptulada em todos os recursos que criamos e vamos falar sobre os scripts que baixamos do Git, do que se trata cada um deles pra começar.

Infra Local

A infra local são os recursos que criamos na nossa maquina, básicamente instalamos:

  • Git - Controle de versão do nosso código, usamos em passos anteriores pra baixar nosso repositório de scripts do projeto.
  • VSCode - Nossa ferramenta de edição de código, no meu caso tenho umas extensões a mais configuradas, como copilot, GenieIA, Airflow, mas não são obrigatórias, basicamente as que instalamos nos passos anteriores já servem
  • Docker - A ferramenta de administração de containers que vai ser a base do nosso Airflow. Depois de configurado não vamos mais mexer, mas deixa ele ai eim.
  • Astro CLI - A ferramenta da astronomer que instala o Airflow de forma simples, depois do Airflow instalado não usaremos mais no projeto, mas deixa ela ae.

Pra continuidade do projeto, dessa lista vamos usar basicamente o Airflow acessando pelo navegador e o VSCode pra editarmos nosso código.

Infra Azure

Agora vou falar sobre os recursos que criamos na nossa conta cloud Azure.

  • Storage Account - Recurso onde iremos armazenar nossos arquivos.
    • Container - A organização de armazenamento no Storage Account é criada inicialmente por containers, só vamos usar o container dados para os dados, no meu caso tenho um outro chamado meta, onde coloquei meus dados do Unity Catalog do Databricks, opcional para esse caso inicial.
  • Databricks - A ferramenta de dados que vamos usar pra tratar os dados recebidos do Aiflow, aplicando um pipeline de engenharia de dados, tratando o arquivo CSV centralizado para tabelas Delta (extremamente performaticas) e tratar nas camadas Bronze (Dado Bruto) e Silver (Dado Refinado).
  • Service principal - Um usuário de serviço que criamos na Azure para integração do Databricks com o Storage Account. Esse mesmo usuário fica como responsável pelos acessos aos dados do storage (External Storage) e você controla com privilégios no Databricks os acessos aos membros da sua equipe, evitando toda vez ir na Azure atrás desses acessos.

Arquivos do repositório

Basicamente, dos arquivos que baixamos do repositório GIT, vamos usar mesmo 1 deles, o que se encontra nesse caminho:

ingestao/airflow/dags/centraliza_dados.py

Esse vai ser o arquivo do nosso pipeline que vai pegar os dados do Ministerio da cultura e fazer o seguinte.

Passos do pipeline

Rascunho tosco do pipeline

  1. Cria um diretório temporário lá dentro do container Docker /tmp/dados/DadosSalicNetCSV, nele vão ser colocados os arquivos do passo 2.
  2. Pega os arquivos de extensão .XLS (que já baixei do site do Ministerio da cultura pra ficar mais fácil) que são do formato binário do Excel e os converte para o formato .CSV onde conseguiremos editar conforme necessário. Os mesmos são gravados na pasta criada no passo 1.
  3. Note que são vários arquivos divididos por anos que vão de 1993 a 2022, os XLSs antes de serem convertidos já vem no diretório ingestao/airflow/dags/dados no repositório baixado, a conversão pra CSV é para que possamos realizar a unificação de todos esses anos em um único arquivo CSV. No passo dataframe_consolidado eu junto todos os arquivos em um dataframe, arrumo o cabeçalho com os nomes que quero, opto por deixar todo conteúdo maiúsculo (se você ver a origem não tem um padrão), tenho uma correção pontual de uns dados cagados que fiquei com preguiça (rs), ordeno os dados por ano e por fim gero o CSV consolidado dentro de uma pasta temporária no container Docker (note que o arquivo ainda não foi pra Azure).
  4. Faço uma validação de comunicação com meu Storage Account Azure antes de enviar o arquivo, é bem útíl pra saber se não tenho problemas de conexão, regras de firewall e coisas do tipo.
  5. Realizo a copia do arquivo consolidado que estava no container Docker para o container dados no diretório csvs.
  6. Lembra que configurarmos pro Airflow se conectar no nosso Databricks? O Operator DatabricksSqlOperator se conecta nele e roda o arquivo que foi baixado no repositório do GitHub, na pasta ingestao/airflow/dags/sql/tabelaraw.sql esse cara cria o catalogo, o schema/database e a tabela onde vamos jogar os dados desse CSV.
  7. O próximo passo, faz um copy into dos dados do CSV para a tabela que foi criada, sendo os dados armazenados no lake já no formato Delta.
  8. O arquivo CSV que estava no container é excluído.

Outros arquivos importantes

  • DockerFile - Nesse arquivo coloquei a versão do Airflow que vou usar e os pacotes que vou baixar que são necessários pro Airflow nesse projeto, inclusive o módulo do Airflow com o Databricks que não é nativo nessas versões mais recentes.
  • converte_xls_csv.ipynb - Um arquivo Jupyter que usei no inicio que explica passo a passo como fiz pra converter os dados até gerar um arquivo unificado, vale dar uma olhada caso não entenda porém é só fonte didática mesmo.
  • variables.json - Arquivo com as variaveis do Airflow com informações que usamos no script de pipeline, como localização do temp dir, nome do storage account e outras.
  • .databricks - Se ela aparecer aí, só descartar, veio informações do meu Databricks (nada sensível).

Finalizando esse passo do projeto

Assista o vídeo quantas vezes for necessário pra entender o que faz o que nesse rolê, é importante entender o fluxo de como vai funcionar e esse e como vamos disponibilizar o dado na camada Bronze.

Próximo passo

Vamos usar uma ferramenta bem legal chamada DBT, bem para fins didáticos mesmo, ela vai realizar o tratamento da tabela Bronze (Dado bruto) onde não colocamos os datatypes das colunas como numérico e outros pontos e possivelmente, criarmos tabelas analiticas finais com base na tabela Silver (Dados refinados). Esse dado final onde as ferramentas de analise como PowerBI e Tableau pega informações consolidadas prontas a partir de uma ou mais tabelas é chamado de Gold (Dado Analitico).