DuckDB: O Banco Analítico In-Process que Está Revolucionando a Análise de Dados Local

O que é o DuckDB e por que você deveria usar?
Lançado em 2019 por pesquisadores da Centrum Wiskunde & Informatica (CWI) na Holanda, o DuckDB é um banco de dados SQL analítico embarcado — ou seja, ele roda dentro do seu próprio processo, sem necessidade de instalar ou gerenciar um servidor separado. Diferente de bancos tradicionais como PostgreSQL ou MySQL, que são otimizados para OLTP (transações), o DuckDB foi projetado do zero para OLAP (processamento analítico), onde consultas agregadas sobre milhões ou bilhões de linhas precisam ser rápidas.
Ele é frequentemente comparado ao SQLite, mas com um foco totalmente diferente: enquanto o SQLite é excelente para transações leves e aplicações embarcadas, o DuckDB brilha em cenários de análise exploratória de dados, ETL, data science e cargas de trabalho analíticas.
Arquitetura Columnar: O Segredo da Performance
A grande inovação do DuckDB está na sua arquitetura de armazenamento columnar (orientada a colunas), em vez do armazenamento row-oriented (orientado a linhas) usado por bancos tradicionais. Essa diferença é crucial para workloads analíticos:
- Compressão superior: Dados do mesmo tipo ficam contíguos, permitindo taxas de compressão muito maiores
- Leitura seletiva: Consultas que acessam apenas algumas colunas não precisam ler linhas inteiras do disco
- Vectorized execution: O processamento é feito em chunks de centenas de milhares de valores por vez, aproveitando SIMD e caches de CPU
- Processamento paralelo: Consultas são automaticamente paralelizadas em múltiplos núcleos sem nenhuma configuração extra
Na prática, isso significa que uma consulta SELECT COUNT(*), AVG(salario) FROM vendas GROUP BY ano em uma tabela de 100 milhões de linhas roda em frações de segundo no DuckDB, enquanto demoraria minutos em um banco row-oriented.
Instalação: Tão Simples Quanto pip Install
A instalação do DuckDB é trivial em qualquer ambiente Python:
# Instalação via pip (a mais comum)
pip install duckdb
# Verificar instalação
python3 -c "import duckdb; print(duckdb.__version__)"
# Para Node.js
npm install duckdb
# Para Java / JVM
# Adicione ao pom.xml: org.duckdb:duckdb_jdbc
# CLI standalone (Linux/Mac/Windows)
curl -fsSL https://install.duckdb.org | sh
duckdb
Sim, é só isso. DuckDB não precisa de servidor, não precisa de Docker, não precisa de configuração de conexão. Você importa e começa a usar.
Consultando CSV, Parquet e JSON Diretamente
Um dos superpoderes do DuckDB é a capacidade de consultar arquivos diretamente, sem precisar carregá-los em uma tabela primeiro. Isso é revolucionário para análise exploratória:
import duckdb
# Consultar um CSV diretamente
resultado = duckdb.sql("""
SELECT
regiao,
COUNT(*) AS total_vendas,
ROUND(AVG(valor), 2) AS ticket_medio,
SUM(valor) AS receita_total
FROM 'vendas_2025.csv'
WHERE status = 'CONCLUIDO'
GROUP BY regiao
ORDER BY receita_total DESC
""")
print(resultado)
# Também funciona com Parquet e JSON!
duckdb.sql("SELECT * FROM 'dados.parquet' LIMIT 10").show()
duckdb.sql("SELECT year, count FROM 'eventos.jsonl'").show()
Isso elimina completamente a necessidade de pipelines de ingestão para exploração inicial de dados. Você aponta o DuckDB para o arquivo e começa a analisar.
Integração com Pandas: O Melhor dos Dois Mundos
DuckDB e Pandas formam uma combinação imbatível para data scientists. O DuckDB executa consultas SQL diretamente sobre DataFrames do Pandas, sem conversão:
import pandas as pd
import duckdb
# DataFrame enorme (100M linhas)
df = pd.read_parquet("vendas_completas.parquet")
# DuckDB consulta o DataFrame sem copiar os dados
resultado = duckdb.sql("""
SELECT
DATE_TRUNC('month', data) AS mes,
categoria,
SUM(quantidade * preco) AS receita
FROM df
WHERE YEAR(data) = 2025
GROUP BY mes, categoria
HAVING receita > 100000
ORDER BY mes, receita DESC
""").df() # .df() retorna um novo DataFrame
print(f"Consultado {len(df):,} linhas em {resultado.shape[0]} grupos")
print(resultado.head())
Enquanto o Pandas é limitado pela memória RAM e tem performance inferior em agregações complexas, o DuckDB usa processamento vetorizado e pode até trabalhar com datasets maiores que a memória (spill-to-disk).
Integração com HTTP e S3 sem Bibliotecas Extras
O DuckDB pode ler dados diretamente de URLs HTTP e buckets S3, sem precisar de bibliotecas adicionais como boto3 ou requests:
# Lendo dados diretamente de uma URL
duckdb.sql("""
SELECT COUNT(*), AVG(score)
FROM 'https://raw.githubusercontent.com/duckdb/duckdb/main/data/weather.csv'
""").show()
# Configurando acesso a S3
duckdb.sql("""
SET s3_region='us-east-1';
SET s3_access_key_id='sua-access-key';
SET s3_secret_access_key='seu-secret-key';
""")
# Consultando dados no S3 como se fossem locais
duckdb.sql("""
SELECT
DATE_TRUNC('hour', timestamp) AS hora,
COUNT(*) AS eventos,
AVG(latencia_ms) AS latencia_media
FROM 's3://meu-bucket/logs/2025/*.parquet'
GROUP BY hora
ORDER BY hora
""").show()
Esse recurso transforma o DuckDB em uma ferramenta de análise descentralizada: você não precisa baixar, extrair ou transformar nada antes de consultar.
Extensões e Ecossistema
DuckDB possui um sistema de extensões que amplia ainda mais suas capacidades:
- httpfs: Leitura/escrita em S3, GCS, HTTP e arquivos remotos
- postgres_scanner: Consulta dados diretamente do PostgreSQL
- sqlite_scanner: Leitura de bancos SQLite existentes
- spatial: Funções geoespaciais (GIS) — pontos, polígonos, distâncias
- json: Manipulação avançada de dados JSON (já inclusa por padrão)
- parquet: Leitura e escrita otimizada de arquivos Parquet
- tpch / tpcds: Geração de dados sintéticos para benchmarks
- icu: Suporte completo a collations e timezones internacionais
-- Instalando e carregando extensões
INSTALL postgres_scanner;
LOAD postgres_scanner;
-- Consultando dados do PostgreSQL remotamente
SELECT * FROM postgres_scan(
'host=meu-servidor port=5432 dbname=meudb',
'public',
'vendas'
)
WHERE data >= '2025-01-01';
DuckDB em Produção: Casos de Uso Reais
Empresas como MotherDuck (plataforma SaaS), dbt Labs, Hex e dezenas de outras já adotaram o DuckDB em produção. Os casos de uso mais comuns incluem:
- Data Science exploratório: Substituindo Pandas em análises que exigem SQL ou datasets maiores que a RAM
- ETL leve: Transformando dados entre CSV, Parquet e JSON com SQL puro
- Processamento de logs: Consultando gigabytes de logs estruturados em segundos
- Testes de pipeline de dados: Validando transformações sem depender de um banco externo
- Embedding analítico: Incorporando análises SQL em aplicações desktop ou mobile
- MotherDuck: DuckDB como serviço gerenciado na nuvem, com suporte a colaboração
Para aplicações que precisam de concorrência multi-usuário ou transações ACID complexas, o DuckDB não é a ferramenta certa — continue usando PostgreSQL, MySQL ou bancos OLTP tradicionais. Mas para análise de dados pura, é difícil encontrar algo mais rápido e simples.
Comparativo: DuckDB vs Alternativas
Para ajudar na decisão, veja como o DuckDB se compara às alternativas populares:
┌──────────────────┬──────────────────┬──────────────────┬──────────────────┐
│ Característica │ DuckDB │ SQLite │ Pandas │
├──────────────────┼──────────────────┼──────────────────┼──────────────────┤
│ Armazenamento │ Columnar │ Row-oriented │ In-memory │
│ Performance │ Altíssima │ Moderada │ Limitada (RAM) │
│ Sintaxe │ SQL completo │ SQL completo │ Python only │
│ Dados > RAM │ Sim (spill) │ Sim │ Não │
│ Concorrência │ Single-process │ Multi-process │ Single-thread │
│ Instalação │ pip install │ nativo │ pip install │
│ Ideal para │ OLAP / Análise │ OLTP / Embarcado │ Prototipagem │
└──────────────────┴──────────────────┴──────────────────┴──────────────────┘
Conclusão
O DuckDB representa uma mudança de paradigma na análise de dados: ele democratiza o poder dos bancos analíticos columnares, tirando a complexidade de gerenciar servidores e clusters. Com instalação em segundos, suporte nativo a CSV, Parquet, JSON e S3, integração perfeita com Pandas e performance comparável a sistemas MPP completos, ele se tornou a ferramenta favorita de data scientists e engenheiros de dados em todo o mundo.
Se você trabalha com análise de dados e ainda não experimentou o DuckDB, comece hoje mesmo com um simples pip install duckdb e veja como consultar milhões de linhas pode ser rápido e divertido.







