- Data Hackers Newsletter
- Posts
- Como integrar DuckDB ao Python para uma análise de dados eficiente
Como integrar DuckDB ao Python para uma análise de dados eficiente
Aprenda a instalar e usar a API do DuckDB no Python para trabalhar com grandes conjuntos de dados.
Integrar DuckDB ao Python é um passo poderoso para quem busca análises de dados eficientes e rápidas, especialmente em cenários que exigem a manipulação de grandes volumes de informações. Neste post, você verá como instalar o DuckDB diretamente com pip
e utilizar suas funcionalidades, desde a execução de consultas SQL até a integração com Pandas para análises ainda mais robustas.
O que é DuckDB e quais são suas funcionalidades?
DuckDB é um sistema de gerenciamento de banco de dados otimizado para análise de dados. Ele é projetado para permitir consultas e transformações de dados de forma rápida e eficiente, tudo dentro do processo do aplicativo. Uma das principais características do DuckDB é seu motor de coluna, que possibilita a execução de consultas analíticas em alta velocidade. Isso permite que os usuários processem cargas de trabalho que podem ser maiores do que a capacidade de memória disponível.
Além disso, o DuckDB suporta execução paralela, o que contribui ainda mais para a agilidade nas consultas. Ele é fácil de instalar e implementar, pois não possui dependências externas, podendo ser executado como um único binário em diversas plataformas, incluindo Windows, macOS e Linux.
Entre suas funcionalidades, o DuckDB possui um dialeto SQL rico que inclui suporte para funções agregadas, subconsultas e funções de janela. Isso permite que os usuários realizem análises complexas e transformações de dados com facilidade. O DuckDB é compatível com múltiplos formatos de arquivo, como CSV, Parquet e JSON, facilitando a integração de dados.
Além disso, por ser um projeto open-source sob a licença MIT, o DuckDB é acessível para todos e promove a colaboração entre desenvolvedores ao redor do mundo. A combinação dessas funcionalidades faz do DuckDB uma ferramenta poderosa e versátil para quem trabalha com grandes volumes de dados e precisa de respostas rápidas.

O DuckDB pode ser um aliado poderoso na análise de dados
Como instalar o DuckDB no Python?
Instalar o DuckDB no Python é um processo simples e rápido. A seguir, você encontrará as instruções para realizar essa instalação utilizando o pip
.
Instalando via Pip
Para instalar a versão mais recente do cliente Python do DuckDB, utilize o seguinte comando no seu terminal:
pip install duckdb
Se você deseja utilizar uma versão pré-lançamento, é possível instalá-la com a opção --pre
, assim:
pip install duckdb --upgrade --pre
Instalando a partir do código-fonte
Caso você prefira ou precise compilar o DuckDB a partir do código-fonte, siga as instruções abaixo:
Certifique-se de que as dependências necessárias estão instaladas em seu sistema.
Execute os seguintes comandos:
BUILD_PYTHON=1 GEN=ninja make
cd tools/pythonpkg
python setup.py install
Para instruções detalhadas sobre como compilar o DuckDB a partir do código-fonte, consulte o guia de construção. Agora você estará pronto para utilizar o DuckDB em seus projetos de análise de dados com Python!
Como integrar o DuckDB ao Python para análise de dados?
Integrar o DuckDB ao Python permite que você aproveite ao máximo suas capacidades analíticas diretamente em seu ambiente de desenvolvimento.
A maneira mais básica de operar com DuckDB em Python é utilizando o comando duckdb.sql()
. Este comando permite que você execute consultas SQL diretamente em um banco de dados em memória. Por exemplo:
import duckdb
# Executa uma simples consulta SQL
duckdb.sql("SELECT 42").show()
Se preferir trabalhar com uma conexão explícita, você pode criar uma usando o método duckdb.connect()
, permitindo tanto um banco de dados em memória quanto o armazenamento persistente em arquivo:
import duckdb
# Conecta a um banco de dados em memória
con = duckdb.connect(':memory:')
# Para persistir dados, especifique um nome de arquivo
con = duckdb.connect("meu_banco.db")
Carregando dados no DuckDB
O DuckDB oferece flexibilidade para ingerir dados de diversas fontes, como arquivos CSV, Parquet e JSON, além de permitir o uso direto de DataFrames do Pandas. Para ler um arquivo CSV, você pode fazer o seguinte:
# Lê um arquivo CSV e cria uma tabela
con.execute("CREATE TABLE vendas AS SELECT * FROM 'vendas.csv'")
Da mesma forma, é possível integrar diretamente com DataFrames:
import pandas as pd
# Cria um DataFrame de exemplo
dados = {'nome': ['Ana', 'Bruno', 'Carlos'], 'idade': [23, 35, 29]}
df = pd.DataFrame(dados)
# Registra o DataFrame como uma tabela
con.register('pessoas', df)
Agora, você pode usar consultas SQL sobre o DataFrame pessoas
:
# Seleciona pessoas com idade acima de 25 anos
resultado = con.execute('SELECT * FROM pessoas WHERE idade > 25').fetchdf()
print(resultado)
Realizando consultas SQL
Uma das vantagens do DuckDB é que você pode realizar consultas SQL complexas através da conexão estabelecida. O método execute()
permite seleções, agregações e junções, utilizando o poder do SQL para manipular os dados de forma eficiente:
# Mostra a média das idades
resultado_media = con.execute('SELECT AVG(idade) FROM pessoas').fetchone()
print(f'A média de idade é: {resultado_media[0]}')
Integração com Pandas
O DuckDB se destaca por sua integração com Pandas, permitindo que você converta os resultados diretamente em DataFrames. Isso facilita o uso de bibliotecas de visualização e manipulação de dados como Matplotlib e Seaborn:
# Executa a consulta e retorna um DataFrame
df_resultado = con.execute('SELECT * FROM pessoas').fetchdf()
print(df_resultado)
Você pode alternar facilmente entre SQL e operações do Python, aproveitando a familiaridade do ecossistema para realizar análises mais abrangentes e complexas.
Finalizando a conexão
Não se esqueça de fechar a conexão após finalizar suas operações:
con.close()
Quais são as vantagens do DuckDB para grandes conjuntos de dados?
O DuckDB tem se destacado como uma solução eficiente para análise de dados, especialmente em contextos que exigem grandes volumes de informações. Aqui estão algumas das principais vantagens do DuckDB:
Performance superior
DuckDB foi projetado para operar rapidamente em conjuntos de dados extensos, utilizando um mecanismo de consulta vetorial que aumenta a utilização do cache da CPU. Em testes de benchmark, demonstrou ser até 1000 vezes mais rápido do que outros bancos de dados SQL tradicionais em determinadas tarefas analíticas.
Armazenamento em formato colunar
Ao contrário da maioria dos bancos de dados que armazenam dados em linhas, o DuckDB utiliza armazenamento colunar. Essa abordagem é vantajosa para operações analíticas, pois permite acessar e processar somente as colunas relevantes, melhorando significativamente a eficiência e a velocidade de consultas.
Facilidade de integração
O DuckDB se integra facilmente a fluxos de trabalho em linguagens de programação populares, como Python e R, permitindo que cientistas de dados realizem análises diretamente em seus scripts.
Suporte a operações complexas
Desenvolvido para análises de dados, o DuckDB fornece suporte a operações complexas, junções e funções de agregação otimizadas, tornando-o uma ferramenta poderosa para cientistas de dados.
Eficiência em ambientes locais
Por ser um banco de dados embarcado, o DuckDB elimina a necessidade de configuração de servidor, operando efetivamente em ambientes locais.
Simplicidade de uso
Gratuito e de código aberto, o DuckDB democratiza o acesso à análise de dados eficiente. Sua instalação e uso simples permitem que equipes menores se beneficiem de análises de alto desempenho.
Um mundo de possibilidades se abre com o DuckDB, que se revela como uma alternativa forte e viável em um cenário dominado por limitações nas tradicionais ferramentas de análise de dados.

Ilustração da integração do DuckDB e do Pandas em um pipeline de dados
Como realizar consultas SQL eficientes com DuckDB?
O DuckDB foi projetado com um foco em consultas analíticas rápidas. Um dos aspectos mais impressionantes é o seu mecanismo de execução vetorial colunar, que resulta em tempos de resposta significativamente mais ágeis em comparação com muitos outros bancos de dados.
Estrutura de consulta otimizada
Após a instalação e configuração, o uso do método sql()
do DuckDB simplifica a execução de comandos SQL:
import duckdb
results = duckdb.sql("SELECT AVG(salario) FROM funcionarios").fetchall()
print(results)
Utilizando funções avançadas
DuckDB suporta funções SQL que aumentam a eficácia das consultas, como SUM()
, COUNT()
, GROUP BY
e JOIN
. A implementação é intuitiva e pode ser feita de maneira semelhante a outros sistemas, permitindo o uso de expressões de tabela comuns (CTEs).
Exemplos práticos de uso
Você pode tornar suas consultas mais eficientes através de boas práticas:
Use seleções específicas: Prefira
SELECT
para colunas específicas em vez deSELECT *
.Filtros adequados: Utilize a cláusula
WHERE
para restringir resultados relevantes.Evite subconsultas desnecessárias: Substitua subconsultas por joins quando os dados já estão relacionados.
SELECT
depto.nome,
COUNT(funcionarios.id) AS total_funcionarios
FROM
departamentos AS depto
JOIN
funcionarios ON depto.id = funcionarios.depto_id
GROUP BY
depto.nome
HAVING
total_funcionarios > 10;
Melhorando o desempenho com particionamento
O DuckDB possibilita particionamento de dados, melhorando o acesso e a manipulação, acelerando operações que exigem grandes conjuntos de dados.
Otimizações adicionais
Utilize índices que podem melhorar o desempenho de leitura em tabelas grandes, pois o DuckDB permite a criação de índices para consultas específicas. Para aprender mais sobre otimizações em consultas SQL, confira este artigo.
Considerações finais
Neste artigo, exploramos como integrar o DuckDB ao Python para executar análises de dados com eficiência. Vimos desde a instalação e configuração até a realização de consultas SQL complexas, abrangendo as vantagens do DuckDB, como sua velocidade e facilidade de uso, especialmente em cenários que envolvem grandes volumes de dados.
Agora, com as ferramentas e conhecimentos adquiridos, você está mais preparado para aproveitar ao máximo o potencial do DuckDB em seus projetos de análise, utilizando suas funcionalidades para transformar dados em insights valiosos.