Acesse o painel da sua conta

Não tem uma conta? Registrar

Entrar em contato

Visite também nosso site craftxp.com.br

  • img
  • img
  • img
  • img
  • img
  • img

Entre em contato

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

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:

  1. Data Science exploratório: Substituindo Pandas em análises que exigem SQL ou datasets maiores que a RAM
  2. ETL leve: Transformando dados entre CSV, Parquet e JSON com SQL puro
  3. Processamento de logs: Consultando gigabytes de logs estruturados em segundos
  4. Testes de pipeline de dados: Validando transformações sem depender de um banco externo
  5. Embedding analítico: Incorporando análises SQL em aplicações desktop ou mobile
  6. 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.

Craft XP
Craft XP