Estudo de pipeline ETL usando Python e DuckDB do zero ao deploy. Quem estiver interessado pelo conteúdo > Clique para assistir o workshop aberto do Luciano Galvão.
Utiliza a biblioteca python-dotenv para carregar variáveis de ambiente a partir de um arquivo .env.
- Função: baixar_aquivos_drive
- Cria um diretório local se ele não existir.
- Utiliza a biblioteca gdown para baixar arquivos de uma pasta no Google Drive para o diretório local especificado.
- Função: listar_arquivos_csv
- Lista todos os arquivos com extensão .csv dentro de um diretório especificado.
- Função: ler_csv
- Lê um arquivo CSV e retorna um DataFrame do DuckDB.
- Exibe o conteúdo do DataFrame e o seu tipo para verificação.
- Função: transformar
- Recebe um DataFrame do DuckDB.
- Executa uma consulta SQL no DuckDB para adicionar uma nova coluna chamada total_vendas, que é o resultado da multiplicação das colunas quantidade e valor.
- Retorna um DataFrame Pandas transformado.
- Função: salvar_no_postgree
- Utiliza a biblioteca SQLAlchemy para criar uma conexão com o banco de dados PostgreSQL usando uma URL obtida das variáveis de ambiente.
- Salva o DataFrame transformado no PostgreSQL na tabela especificada, adicionando os dados se a tabela já existir (if_exists='append').
- Git
- Python 3.12.1 (recomendado: usar pyenv para gerenciamento de versão)
- Poetry (gerenciador de pacotes e ambiente virtual)
- PostgreSQL
- Variáveis de ambiente configuradas em um arquivo .env
$ poetry add gdown streamlit psycopg2-binary python-dotenv sqlalchemy
- Clone o repositório
$ git clone https://github.com/IasmimHorrana/etl-with-python-duckdb.git
$ cd etl-with-python-duckdb
- Crie e ative um ambiente virtual
pyenv local 3.12.1
poetry shell
- Execute o pipeline:
python script.py
- Configurar variáveis de ambiente
Crie um arquivo .env na raiz do projeto e configure as variáveis de ambiente necessárias. Com base no código fornecido, você precisará da variável DATABASE_URL para conectar ao PostgreSQL. O conteúdo do .env deve ser algo assim:
DATABASE_URL=postgresql://user:password@localhost:5432/nome_do_banco
Aqui está uma visão geral do que cada função no script faz:
- conectar_banco(): Conecta ao banco de dados DuckDB.
- inicializar_tabela(con): Cria a tabela historico_arquivos se não existir.
- registrar_arquivo(con, nome_arquivo): Insere um registro na tabela historico_arquivos.
- arquivo_processados(con): Retorna um conjunto de arquivos que já foram processados.
- baixar_aquivos_drive(url_pasta, diretorio_local): Baixa arquivos de uma pasta do Google Drive para um diretório local.
- listar_arquivos_csv(diretorio): Lista todos os arquivos CSV em um diretório.
- ler_csv(caminho_arquivo): Lê um arquivo CSV e retorna um DataFrame DuckDB.
- transformar(df: DuckDBPyRelation) -> DataFrame: Transforma os dados adicionando uma coluna total_vendas.
- salvar_no_postgree(df_duckdb, tabela): Salva o DataFrame transformado no PostgreSQL.
- pipeline(): Orquestra todo o processo ETL.