This README provides instructions for configuring and running this solution, which uses Astro CLI, Docker, and Airflow. It also explains how to configure connectors in Airflow to test the flow and how to deploy to Astronomer.
- Docker installed and running
- Astro CLI installed
- Account on Astronomer to perform the deployment
- Python 3.11.5
- Clone the repository and access the project directory:
git clone https://github.com/lorenzouriel/airflow-with-duckdb
cd airflow-with-duckdb
- Install dependencies:
pip install -r requirements.txt
- Start Astro CLI: To test the solution locally, use Astro CLI with Docker.
astro dev start
This will launch an Airflow development environment using Docker.
- Access Airflow locally at http://localhost:8080 to view and test the DAGs.
For DAG to work correctly, you need to configure two connections in Airflow:
my_motherduck_conn
: The motherduck connection.my_postgresdb_conn
: The postgres connection.
Go to the Admin > Connections > Add (+) > Connection Type (Postgres / Duckdb) tab in Airflow and fill in the necessary information.
When you are ready to deploy to the production environment, follow the steps below.
- Authenticate yourself to Astronomer:
astro login astronomer.io
- Prepare for Deploy:
astro deploy --dags
1. Extract: The first step involves extracting data from an external API. This extraction process uses Python and Requests to obtain the data and prepare it for transformation.
2. Transform: The extracted data undergoes a transformation also carried out in Python. At this stage, data can be cleaned, filtered, validated against data contracts and prepared to be loaded into the next PostgreSQL.
3. Load: After transformation, the data is loaded into PostgreSQL, using Astro CLI and Aiflow to orchestrate and monitor this process.
4. Extract and Load (Batch): Periodically, there is a batch extraction of PostgreSQL data, which is loaded into the MotherDuck platform for analysis and long-term storage.
5. Architecture: We see three fundamental tools for this process:
- Apache Airflow and Astro CLI for ETL orchestration.
- Astronomer as the platform to facilitate the use of Airflow.
- Docker to contain and manage project dependencies, ensuring development and production environments are consistent.
This solution adopts an MVC (Model-View-Controller) approach to Airflow, which facilitates the organization and validation of data through clear and well-defined data contracts. This model allows you to centralize validations, ensuring that data complies with requirements before being processed. Furthermore, the use of Airflow is focused exclusively on orchestrating workflows and executing DAGs, without dependence on specific native operators, making the system more flexible and scalable.
Another strong point of the solution is the creation of a custom operator in Airflow. This operator was developed to meet specific application needs, providing a deeper understanding of how operators work in Airflow. Customization allows the solution to work autonomously, without depending on external tools, increasing the flexibility to adapt the ETL as new requirements arise.
PORTUGUÊS
Este README fornece as instruções para configurar e executar esta solução, que utiliza o Astro CLI, Docker, e Airflow. Ele também explica como configurar conectores no Airflow para testar o fluxo e como fazer o deploy para o Astronomer.
- Docker instalado e em execução
- Astro CLI instalado
- Conta no Astronomer para realizar o deploy
- Python 3.11.5
- Clone o repositório e acesse o diretório do projeto:
git clone https://github.com/lorenzouriel/airflow-with-duckdb
cd airflow-with-duckdb
- Instale as dependências:
pip install -r requirements.txt
- Inicie o Astro CLI: Para testar a solução localmente, utilize o Astro CLI com Docker.
astro dev start
Isso iniciará um ambiente de desenvolvimento com Airflow usando o Docker.
- Acesse o Airflow localmente em http://localhost:8080 para visualizar e testar as DAGs.
Para que a DAG funcione corretamente, você precisa configurar duas conexões no Airflow:
my_motherduck_conn
: A conexão do motherduck.my_postgresdb_conn
: A conexão do postgres.
Vá até a aba Admin > Connections > Add (+) > Connection Type (Postgres / Duckdb) no Airflow e preencha as informações necessárias.
Quando estiver pronto para realizar o deploy para o ambiente de produção, siga os passos abaixo.
- Autentique-se no Astronomer:
astro login astronomer.io
- Prepare o Deploy:
astro deploy --dags
1. Extract: A primeira etapa envolve a extração de dados de uma API externa. Esse processo de extração utiliza Python e a Requests para obter os dados e prepará-los para transformação.
2. Transform: Os dados extraídos passam por uma transformação também realizada em Python. Nessa etapa, os dados podem ser limpos, filtrados, validados em contratos de dados e preparados para serem carregados no próximo PostgreSQL.
3. Load: Após a transformação, os dados são carregados em um PostgreSQL, utilizando Astro CLI e Aiflow para orquestrar e monitorar esse processo.
4. Extract e Load (Batch): Periodicamente, há uma extração em lote dos dados do PostgreSQL, que são carregados na plataforma MotherDuck para análise e armazenamento em longo prazo.
5. Arquitetura: Vemos três ferramentas fundamentais para esse processo:
- Apache Airflow e Astro CLI para a orquestração do ETL.
- Astronomer como a plataforma para facilitar o uso do Airflow.
- Docker para conter e gerenciar as dependências do projeto, garantindo que os ambientes de desenvolvimento e produção sejam consistentes.
Essa solução adota uma abordagem MVC (Model-View-Controller) no Airflow, o que facilita a organização e validação dos dados através de contratos de dados claros e bem definidos. Esse modelo permite centralizar as validações, garantindo que os dados estejam em conformidade com os requisitos antes de serem processados. Além disso, o uso do Airflow é focado exclusivamente na orquestração de workflows e execução de DAGs, sem dependência de operadores nativos específicos, tornando o sistema mais flexível e escalável.
Outro ponto forte da solução é a criação de um operador customizado no Airflow. Esse operador foi desenvolvido para atender a necessidades específicas da aplicação, proporcionando uma compreensão mais profunda do funcionamento dos operadores no Airflow. A customização permite que a solução funcione de forma autônoma, sem depender de ferramentas externas, ampliando a flexibilidade para adaptar o ETL conforme novos requisitos surgirem.