O DuckDB, por ser um sistema de banco de dados analítico leve, apresenta alto desempenho e é embutível, além de ter sido projetado para executar consultas SQL complexas de forma rápida e eficiente, especialmente em grandes conjuntos de dados. Neste Guia para Usar o DuckDB em Python, será possível explorar alguns exemplos que destacam sua aplicação prática. Ademais, ele é conhecido como o “SQLite para análises” porque combina, de maneira eficiente, a simplicidade de integração do SQLite com otimizações específicas para cargas de trabalho analíticas.
Principais Características:
- Embutível: Não requer um servidor externo, bem como funciona diretamente no seu ambiente Python.
- Armazenamento em Colunas: Otimizado para consultas analíticas, assim como agregações e filtros.
- Velocidade: Processa dados rapidamente, especialmente em operações complexas.
- Compatibilidade: Integra-se nativamente com Pandas, Parquet, Arrow e outros formatos modernos.
Por que Usar o DuckDB?
- Banco de Dados em Processo:
Execute consultas diretamente no seu script Python, sem configurações complexas. - Otimização Analítica:
Armazena dados em formato colunar, ideal para operações comoGROUP BY
eJOIN
. - SQL Completo:
Use sintaxe SQL padrão para manipular dados, portanto facilitando a sua adoção. - Velocidade e Eficiência:
Paraleliza automaticamente operações, assim como trabalha com dados em disco ou memória. - Integração com Ecossistema Python:
Além disso, sua compatibilidade com formatos modernos como DataFrames Pandas, arquivos Parquet e Arrrow.
Instalação
Para instalar o DuckDB, use o pip
ou conda
:
pip install duckdb
# ou
conda install -c conda-forge python-duckdb
Criando um Banco de Dados
Banco de Dados em Memória:
import duckdb as dd
con = dd.connect(':memory:') # Os dados são perdidos ao fechar a conexão
Banco de Dados Persistente (em disco):
con = dd.connect('meu_banco.db') # Os dados são salvos no arquivo 'meu_banco.db'
Uso Básico
Aliás, veja como executar uma consulta SQL simples:
Executando Consultas SQL:
# Exemplo 1: Consulta simples
resultado = dd.sql("SELECT 'DuckDB é incrível' AS mensagem").fetchall()
print(resultado) # Saída: [('DuckDB é incrível',)]
# Exemplo 2: Criando uma tabela e inserindo dados
con.execute('''
CREATE TABLE países (
país VARCHAR,
código VARCHAR,
região VARCHAR
)
''')
con.execute("INSERT INTO países VALUES ('Brasil', 'BR', 'América do Sul')")
Ingestão de Dados
No entanto, para grandes volumes de dados, é mais eficiente carregar dados diretamente de arquivos CSV ou Parquet.
# Carregar dados de um CSV diretamente para uma tabela
con.execute('''
INSERT INTO países
SELECT * FROM 'paises.csv'
''')
# Consultar dados de um arquivo Parquet sem carregá-los na memória
df = con.sql("SELECT * FROM 'dados.parquet' WHERE região = 'Ásia'").df()
Integração com Pandas
Além disso, o DuckDB permite converter resultados de consultas diretamente em DataFrames Pandas.
Convertendo Resultados em DataFrames:
import pandas as pd
# Converter uma consulta em DataFrame
df = con.sql("SELECT * FROM países").df()
# Inserir dados de um DataFrame no DuckDB
con.execute("INSERT INTO países SELECT * FROM df")
Consultas Analíticas Avançadas
Por exemplo, podemos calcular a média de salários e filtrar funcionários acima dessa média:”
Exemplo 1: Agregação com GROUP BY
con.sql('''
SELECT região, COUNT(DISTINCT país) AS total_países
FROM países
GROUP BY região
ORDER BY total_países DESC
''').show()
Exemplo 2: Cálculo de Média com CTE
con.sql('''
WITH média_salários AS (
SELECT AVG(salário) AS média FROM funcionários
)
SELECT * FROM funcionários
WHERE salário > (SELECT média FROM média_salários)
''').show()
Vantagens sobre o Pandas

Recurso | DuckDB | Pandas |
---|---|---|
Armazenamento | Colunar (ideal para análises) | Linha (genérico) |
Velocidade | Em contraste com o Pandas, o DuckDB processa dados em paralelo, otimizando consultas complexas. | Processamento single-thread |
Dados Grandes | Como resultado, operações como agregações e filtros são executadas em segundos, mesmo em grandes datasets. | Contudo, o Pandas pode ser menos eficiente para datasets que excedem a memória RAM. |
SQL | Suporte nativo | Requer conversão para DataFrame |
Em resumo, o DuckDB oferece vantagens claras em cenários analíticos de alto desempenho.
Conclusão
Portanto, o Guia para Usar o DuckDB em Python vai ajudar você a utilizar esta ferramenta poderosa para análises de dados em Python, combinando a simplicidade do SQLite com otimizações para cargas analíticas. Sua integração com Pandas, Parquet e Arrow, aliada à velocidade, o torna indispensável para quem lida com grandes volumes de dados.
Recursos Adicionais:
Deixe uma resposta