Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[Airflow Meetup] Orquestração de pipelines com Airflow e dbt

[Airflow Meetup] Orquestração de pipelines com Airflow e dbt

etc

Cadu Magalhães

March 14, 2024
Tweet

More Decks by Cadu Magalhães

Other Decks in Programming

Transcript

  1. Quem é esse? • 26 anos • 4 anos de

    engenharia de dados • Google Cloud certified • Dono de gatos • Nerd e músico frustrado • Especialista em gambiarras • Participante de eventos e caçador de brindes Cadu Magalhães @1cadumagalhaes blog.cadumagalhaes.dev datacareer.guide
  2. O que é DataOps? “DataOps é uma metodologia que combina

    práticas de Agile, DevOps e Lean Manufacturing para melhorar a velocidade, a qualidade e a confiabilidade do processo de análise de dados. ” - Chat GPT
  3. O que é Modern Data Stack? “A modern data stack

    é uma abordagem de arquitetura de dados composta por um conjunto de ferramentas e tecnologias integradas, que permitem às empresas coletar, armazenar, processar e analisar dados de forma ágil e escalável, facilitando a tomada de decisões baseadas em dados.” - Chat GPT
  4. • Estrutura escalável • Manutenção simples • Foco no desenvolvimento

    • Mais governança dos dados Por que Modern Data Stack?
  5. Uma pipeline de dados 06 Visualização 03 Transformação 04 Orquestração

    05 Monitoramento Qualidade 02 Armazenamento e processamento 01 Ingestão
  6. Uma pipeline de dados 06 Visualização 03 Transformação 04 Orquestração

    05 Monitoramento Qualidade 02 Armazenamento e processamento 01 Ingestão 03 Transformação 04 Orquestração
  7. Introdução ao dbt “dbt™ é uma ferramenta de fluxo de

    trabalho de transformação SQL-first que permite que as equipes implantem código analítico de forma rápida e colaborativa seguindo as práticas recomendadas de engenharia de software, como modularidade, portabilidade, CI/CD e documentação.” - dbt Uma ferramenta de modelagem e transformação de dados. Foi criado em 2021, e seu core é open-source.
  8. Introdução ao dbt • Construção de modelos ◦ Código ◦

    Documentação ◦ Testes • Mapeamento dinâmico de dependências • Reutilização de código • Utilização de ferramentas de versionamento e CI/CD
  9. Começando com o dbt Vamos usar o dbt-core, o pacote

    de código aberto Basta instalar (a forma recomendada é via pip) e inicializar o seu projeto. Isso vai criar algumas pastas e arquivos, incluindo o dbt_project.yml, que é o arquivo principal de configuração do seu projeto. Para usar local, você precisa configurar a conexão com o seu banco de dados. Como vamos usar no airflow, vou pular este passo. https://docs.getdbt.com/docs/core/connect-data-platform/connection-profiles
  10. Estrutura de pastas e arquivos do dbt Dentro da pasta

    models nós escrevemos nossos modelos e transformações. As outras pastas tem outros objetivos, então vamos focar aqui por enquanto. Nesse diretório, qualquer arquivo .sql que você criar vai ser considerado um modelo. Você também pode criar pastas e subpastas para fazer a organização que achar melhor.
  11. Organização de modelos do dbt A estrutura recomendada pelo próprio

    dbt é a seguinte: 1. Staging: criando nossos átomos, nossos blocos de construção modulares iniciais, a partir de dados de origem 2. Intermediate: empilhar camadas de lógica com propósitos claros e específicos, preparar nossos modelos de teste 3. Marts: reunindo nossas peças modulares em uma visão ampla e rica das entidades com as quais nossa organização se preocupa 4. Sources*: pode ser utilizado para que possamos usar as fontes de forma dinâmica, assim como o restante dos modelos.
  12. Definindo os modelos do dbt Dentro desse diretório, podemos definir:

    1. Modelos: são arquivos SQL (ou python) com a lógica da transformação, que vão ser executados e gerar os resultados no seu banco de dados 2. Schemas: são arquivos yaml que definem as propriedades dos modelos, incluindo o nome da tabela, o nome das colunas e o tipo de cada uma, além de poder definir testes simples. 3. Documentação: são arquivos Markdown que vão ser renderizados como documentação adicional no seu projeto.
  13. Configuração dos modelos do dbt Também precisamos escrever configurações sobre

    os nossos modelos, onde podemos definir o tipo de materialização*, definir tags, descrição, etc. Isso pode ser feito: • no arquivo dbt_project.yml • nos arquivos .yaml de cada modelo • ou ainda num bloco de configuração no início de cada modelo.
  14. Materialização de modelos do dbt Materializações são as estratégias para

    persistir os modelos dentro do seu warehouse. O dbt tem 5 tipos de materialização: • tabela • view • incremental • ephemeral • view materializada
  15. O projeto de exemplo Esse projeto foi criado pelo próprio

    dbt para demonstrar sua funcionalidade. Nós vamos configurar a execução para que ele possa ser orquestrado via Airflow.
  16. Introdução ao Airflow “Apache Airflow™ é uma plataforma de código

    aberto para desenvolvimento, agendamento e monitoramento de fluxos de trabalho orientados em lote.” - Airflow Uma ferramenta de orquestração de qualquer tipo de pipeline. Foi criado em 2015 pela Airbnb, e hoje faz parte da Apache Foundation.
  17. Introdução ao Airflow • Construção de pipelines como código (em

    python) ◦ Pipelines geradas dinamicamente ◦ Ambiente extensível ◦ Bastante flexível • Pacotes de conexão com os principais serviços e ferramentas do mercado. • Orquestração de pipelines em batch, não foi feito para utilização com dados em tempo real.
  18. Primeiros passos com o Airflow Para instalar o airflow, você

    pode usar o pacote de python e fazer toda a configuração. A Astronomer também disponibiliza o Astro CLI, que permite a configuração do airflow com um único comando. Acredito que a melhor forma de fazer o deploy local é utilizando o docker compose. A documentação oficial provê um arquivo de configuração do docker compose com todas as informações necessárias para utilização.
  19. Conceitos fundamentais • DAG: Directed Acyclic Graphs, que são os

    workflows que vamos orquestrar. • DAG run: é uma execução de um DAG, que pode ser manual ou agendada. • Task: são as tarefas que compõem um DAG, e que são executadas em uma DAG run. • Task instance: é uma execução de uma task em uma DAG run. • Operadores: são classes que representam uma task, e que podem ser instanciadas para criar uma task instance. • Sensors: são classes que representam uma task que espera por um evento, e que podem ser instanciadas para criar uma task instance. • Provedores: são os pacotes mantidos pela comunidade e que contém os operadores, sensores e mais.
  20. Configurações da DAG • dag_id: o nome da DAG •

    schedule_interval: a frequência de execução da DAG. Pode ser CRON ou uma macro como `@daily` • schedule: para agendamento dinâmico com base em datasets • start_date: a data de início da DAG • end_date: a data de fim da DAG • catchup: se a DAG deve executar as DAG runs que não foram executadas enquanto ela estava desligada • tags: tags que podem ser usadas para filtrar as DAGs • fail_stop: se a DAG deve parar de executar caso uma task falhe (Airflow 2.7+) • default_args: argumentos padrão que podem ser usados nas tasks
  21. Introdução ao Cosmos A principio, o airflow não tem suporte

    nativo ao dbt core. Nos últimos anos a recomendação para sua execução tem sido criar um BashOperator e executar o comando dbt run. Para usuários do dbt cloud, existem operadores oficiais que podem ser usados. No começo de 2023 a Astronomer lançou o Cosmos, que permite que você transforme o seu projeto de dbt em DAGs e Task Groups.
  22. Introdução ao Cosmos • Gerar tasks para cada um dos

    modelos e testes • Monitoramento granular da pipeline • Utilização de conexões do airflow para execução das transformações
  23. Instalando o Cosmos Para conseguir utilizar, precisamos instalar o pacote

    astronomer-cosmos no ambiente em que nosso Airflow vai ser executado. Para isso, podemos personalizar a imagem docker do nosso container e acrescentar uma etapa de instalação de pacotes.
  24. Configuração do Cosmos Precisamos fazer algumas configurações passando o caminho

    do nosso projeto, o nome da conexão utilizada para conectar com o banco de dados, e o nome do profile que vamos usar: