O que ? DuckDB

DuckDB ? um banco de dados anal?tico embutido que roda dentro do seu processo, sem precisar de um servidor separado. Pense nele como o SQLite, mas projetado para consultas anal?ticas pesadas em vez de opera??es transacionais simples.

Ele foi criado em 2018 por pesquisadores da Universidade de Radboud, nos Pa?ses Baixos, é virou open source desde o in?cio. O problema que resolve ? claro: voc? tem um arquivo CSV, Parquet ou JSON com milh?es de linhas é quer fazer agrega??es, joins é filtros sem montar toda uma infraestrutura de banco de dados.

Em 2024 é 2025, o DuckDB explodiu em popularidade entre engenheiros de dados é cientistas de dados porque oferece performance de banco anal?tico (estilo BigQuery ou Redshift) sem nenhuma complexidade operacional. Voc? instala a biblioteca é come?a a usar.

Como funciona

A chave do DuckDB ? o armazenamento colunar. Bancos tradicionais como PostgreSQL guardam dados linha por linha. Se voc? quer somar a coluna de receita de 10 milh?es de pedidos, o banco precisa ler todos os campos de cada linha mesmo que voc? s? queira uma coluna.

O DuckDB guarda os dados coluna por coluna. Para somar a receita, ele l? apenas os valores daquela coluna, ignorando tudo mais. Isso reduz drasticamente a quantidade de dados lidos do disco é da mem?ria, tornando agrega??es muito mais r?pidas.

Al?m disso, ele usa vetoriza??o: processa blocos de valores de uma vez usando instru??es SIMD do processador, em vez de valor por valor. ? a mesma t?cnica usada por bancos como ClickHouse é sistemas como Apache Arrow. O resultado ? que opera??es que levariam segundos em SQLite ou minutos em pandas levam milissegundos no DuckDB.

Principais recursos

O DuckDB traz uma lista de funcionalidades que fazem diferen?a no dia a dia de quem trabalha com dados:

  • Leitura nativa de Parquet, CSV é JSON: voc? pode fazer SELECT * FROM arquivo.parquet diretamente, sem importar nada
  • Integra??o com pandas é polars: consulte DataFrames Python com SQL sem copiar dados, usando mem?ria compartilhada
  • SQL completo é moderno: suporta CTEs, window functions, unnest, list aggregations é extens?es como fuzzy search
  • Multi-threading autom?tico: aproveita todos os n?cleos do processador sem configura??o
  • Modo em mem?ria é em arquivo: pode rodar sem gravar nada em disco ou persistir em um arquivo .duckdb
  • Extens?es oficiais: httpfs para ler S3 é URLs, spatial para geodados, json, excel é outras

O suporte a leitura de arquivos remotos via HTTPS é S3 ? especialmente poderoso. Voc? pode consultar um arquivo Parquet direto no S3 sem baixar para o seu computador.

Como come?ar: instala??o passo a passo

A instala??o ? simples em qualquer linguagem popular. Em Python, que ? o caso de uso mais comum:

pip install duckdb

Isso ? tudo. Sem servidor, sem configura??o de porta, sem vari?vel de ambiente. Para come?ar a usar:

import duckdb

# Consulta em mem?ria
resultado = duckdb.sql("SELECT 42 AS resposta").fetchdf()

# Ler um CSV direto
df = duckdb.sql("SELECT * FROM dados.csv WHERE valor > 1000").fetchdf()

# Usar um banco em arquivo
con = duckdb.connect("meu_banco.duckdb")
con.sql("CREATE TABLE pedidos AS SELECT * FROM pedidos.parquet")

Em outras linguagens, o processo ? igualmente direto. Em Node.js: npm install @duckdb/node-api. Em Java existe o driver JDBC oficial. Em R: install.packages("duckdb"). Em Go é Rust tamb?m h? bindings oficiais.

Exemplo pr?tico

Cen?rio real: voc? tem 5 milh?es de registros de vendas em um arquivo Parquet é quer descobrir os 10 produtos mais vendidos por regi?o no ?ltimo trimestre. Em pandas puro, isso exigiria carregar o arquivo inteiro na mem?ria é fazer groupby encadeados.

Com DuckDB:

import duckdb

resultado = duckdb.sql("""
  SELECT
    região,
    produto,
    SUM(quantidade) AS total_vendas,
    SUM(receita) AS receita_total
  FROM vendas.parquet
  WHERE data >= 2026-01-01
  GROUP BY região, produto
  QUALIFY ROW_NUMBER() OVER (
    PARTITION BY região ORDER BY SUM(quantidade) DESC
  ) <= 10
""").fetchdf()

print(resultado)

Essa consulta roda em segundos mesmo com milh?es de registros, usando a cl?usula QUALIFY com window function. O DuckDB n?o precisa carregar o arquivo inteiro: l? apenas as colunas necess?rias é aplica os filtros durante a leitura.

Compara??o com alternativas

O DuckDB ocupa um nicho espec?fico no ecossistema de bancos de dados:

DuckDB vs SQLite: SQLite ? transacional é ?timo para aplica??es com muitas escritas é leituras por chave prim?ria. DuckDB ? anal?tico, brilha em agrega??es é scans de muitas linhas. Se voc? est? construindo um app com usu?rios, use SQLite. Se est? analisando logs ou dados de vendas, use DuckDB.

DuckDB vs pandas: pandas ? mais flex?vel para transforma??es complexas é tem um ecossistema de visualiza??o integrado. DuckDB ? mais r?pido para SQL anal?tico é usa menos mem?ria porque n?o precisa carregar tudo de uma vez. Eles se complementam: muitos projetos usam DuckDB para queries é pandas para visualizar o resultado.

DuckDB vs ClickHouse ou BigQuery: ClickHouse é BigQuery s?o solu??es de servidor para escala de terabytes com m?ltiplos usu?rios. DuckDB ? para um ?nico processo, ideal at? cerca de dezenas de gigabytes.

Pontos positivos é limita??es

Os pontos positivos s?o claros: zero infraestrutura, velocidade impressionante para queries anal?ticas, SQL moderno é completo, integra??o perfeita com Python é o ecossistema de dados.

As limita??es tamb?m existem. DuckDB n?o ? ideal para opera??es transacionais com muitos inserts é updates simult?neos. Ele foi projetado para ler muito é escrever pouco. Tamb?m n?o tem suporte a m?ltiplos escritores simult?neos em um mesmo arquivo.

Para dados al?m de algumas dezenas de gigabytes voc? vai precisar de uma m?quina com bastante RAM ou trabalhar em lotes. Para escala real de petabytes, voc? precisa de solu??es distribu?das como Spark ou BigQuery.

Casos de uso reais

Quatro perfis que se beneficiam muito do DuckDB:

  • Cientista de dados: processa arquivos Parquet do S3 com SQL sem baixar localmente, analisa logs de modelos de ML, faz feature engineering r?pido antes de treinar
  • Engenheiro de dados: substitui pandas para transforma??es ETL complexas, valida pipelines localmente com amostras de dados reais
  • Desenvolvedor backend: adiciona capacidade anal?tica em APIs sem montar um banco anal?tico separado, gera relat?rios agregados com performance
  • Analista de neg?cio: explora CSVs grandes sem precisar do Excel ou de acesso ao banco de produ??o

Dicas é boas pr?ticas

Algumas dicas de quem usa DuckDB em produ??o:

  • Use Parquet sempre que poss?vel. O ganho de performance comparado a CSV ? enorme porque Parquet j? ? colunar é tem compress?o embutida
  • Prefira SQL a Python puro. Quanto mais voc? faz dentro do SQL, mais o DuckDB pode otimizar. Filtre, agregue é formate tudo no SQL antes de trazer para Python
  • Cuidado com conex?es em aplica??es web. DuckDB suporta m?ltiplos leitores simult?neos mas apenas um escritor
  • Use o modo em mem?ria para testes. Cria um banco tempor?rio ideal para testes unit?rios, muito mais r?pido que SQLite em casos anal?ticos

Vale a pena?

Para quem trabalha com an?lise de dados, engenharia de dados ou precisa adicionar capacidade anal?tica a um projeto Python, a resposta ? sim. O DuckDB elimina toda a fric??o de montar infraestrutura de dados é entrega performance que surpreende na primeira vez que voc? roda uma query em milh?es de linhas é o resultado aparece em menos de um segundo.

Se voc? ainda usa pandas para fazer groupby em arquivos grandes é sente a lentid?o, experimente DuckDB hoje mesmo. A curva de aprendizado ? praticamente zero se voc? j? sabe SQL.