DuckDB: Milhões de Linhas em Segundos — Análise de Dados sem Servidor
Milhões de linhas processadas em segundos. Sem servidor. 🦆
Hoje rodei uma análise complexa em dados da Receita Federal usando DuckDB e a velocidade me impressionou — de novo.
O DuckDB não é mais um "experimento legal". É uma ferramenta legítima de engenharia de dados que merece espaço no stack de qualquer pessoa que trabalha com análise de dados no dia a dia.
O que é o DuckDB?
O DuckDB é um banco de dados SQL embarcado e orientado a colunas. A analogia mais direta é com o SQLite: assim como o SQLite, ele não precisa de servidor, não precisa de instalação complexa, e roda dentro do seu próprio processo. Mas enquanto o SQLite é otimizado para workloads transacionais (OLTP), o DuckDB é feito sob medida para análise e agregação (OLAP).
Isso significa que ele é absurdamente rápido em operações como:
- Agregações (
GROUP BY,SUM,AVG) - Filtros em grandes volumes
- Joins entre tabelas com milhões de linhas
- Leitura direta de arquivos Parquet, CSV e JSON
Por que isso importa?
No mundo real, a maior parte do tempo de uma análise de dados não está na análise em si — está na preparação do ambiente. Instalar um banco, configurar conexão, fazer ingestão de dados, esperar o Pandas carregar tudo na memória...
Com DuckDB, o fluxo é brutalmente simples:
pip install duckdb
import duckdb
duckdb.sql("""
SELECT
uf,
COUNT(*) as total_empresas,
AVG(CAST(capital_social AS DECIMAL)) as capital_medio
FROM 'dados_rf.parquet'
WHERE situacao_cadastral = 'ATIVA'
GROUP BY uf
ORDER BY total_empresas DESC
""")
Sem servidor. Sem schema definition. Sem import. Os dados estão no disco, o DuckDB lê direto.
O caso de uso ideal
DuckDB brilha em cenários ad-hoc — quando você precisa "interrogar" dados pesados rapidamente, sem querer gastar 20 minutos configurando infraestrutura.
Alguns exemplos que testei:
- Análise exploratória: abrir um CSV de 2GB e rodar
SELECT,GROUP BY, janelas — em segundos - Integração com visualização: DuckDB + Evidence para dashboards built with SQL
- ETL leve: ler CSV, transformar com SQL, escrever Parquet
- Dados da Receita Federal: o dataset completo de CNPJs (milhões de linhas) cabe em poucos GB em Parquet, e consultas agregadas rodam em sub-segundos
E o Pandas?
Pandas continua sendo uma ferramenta indispensável para transformações complexas e prototipação. Mas ele tem um gargalo conhecido: tudo precisa caber na memória. Com datasets grandes, o Pandas começa a "sofrer" — memória explode, o garbage collector trava, e você perde tempo otimizando código que deveria ser uma query SQL simples.
DuckDB resolve isso porque:
- Processamento out-of-core: não precisa carregar tudo na RAM
- Orientado a colunas: consultas que acessam poucas colunas são muito mais rápidas
- SQL padrão: sua experiência com SQL é reaproveitada totalmente
E o melhor: DuckDB e Pandas não são excludentes. Você pode rodar DuckDB dentro do Pandas via duckdb.sql("SELECT ... FROM df"), onde df é um DataFrame — o DuckDB lê o Pandas sem copiar os dados.
Para o dia a dia
Sigo usando PostgreSQL para tudo que é transacional — sistemas que precisam de integridade ACID, concorrência, users, updates frequentes.
Para inteligência e análise de alta performance — no terminal, no notebook, ou embedado no código — DuckDB é a ferramenta certa.
Você já incluiu DuckDB no seu stack de engenharia?