Este projeto demonstra a criação de uma arquitetura de data lake utilizando tecnologias on-premise. O objetivo é fornecer um exemplo prático e simplificado de como implementar um data lake sem depender de serviços em nuvem.
- Apache Airflow: Orquestração de workflows
- MinIO: Armazenamento de objetos compatível com S3
- DuckDB: Banco de dados analítico
- Polars: Processamento de dados em memória
Obs: Embora o Polars seja usado para processamento de dados neste projeto, ele poderia ser substituído por outras tecnologias como Apache Spark, dependendo dos requisitos de carga de trabalho. A escolha do Polars visa manter a simplicidade da implementação.
No include do projeto tem um dataset que foi baixado do kaggle e pode ser encontrado neste link: https://www.kaggle.com/datasets/shivamkumar121215/nba-stats-dataset-for-last-10-years
Antes de começar, certifique-se de ter instalado:
-
Clone o repositório:
git clone https://github.com/alandrebraga/onpremise-datalake
-
Navegue até o diretório do projeto e inicialize o projeto Airflow:
cd onpremise-datalake astro dev init
Nota: Quando solicitado para inicializar o projeto em um diretório não vazio, responda "Yes".
-
Inicie os containers:
astro dev start
Isso iniciará todos os containers necessários, incluindo MinIO e DuckDB.
Para executar consultas nos arquivos Parquet armazenados no MinIO, siga estes passos:
-
Conecte-se ao DuckDB:
duckdb nba.db
-
Configure a conexão S3 (MinIO):
CREATE OR REPLACE SECRET secret1 ( TYPE S3, KEY_ID 'minio', SECRET 'miniopassword', REGION 'us-east1', ENDPOINT 'minio:9000', USE_SSL false, URL_STYLE 'path' );
-
Crie tabelas a partir dos arquivos Parquet:
CREATE TABLE dim_team AS SELECT * FROM 's3://nba/gold/dim_team.parquet'; CREATE TABLE dim_player AS SELECT * FROM 's3://nba/gold/dim_player.parquet'; CREATE TABLE fact_nba AS SELECT * FROM 's3://nba/gold/fact_nba.parquet';
-
Execute consultas:
SELECT * FROM dim_team; -- ou diretamente do arquivo Parquet: SELECT * FROM 's3://nba/gold/dim_player.parquet';