Guia para Usar o DuckDB em Python

Guia para Usar o DuckDB em Python

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?

  1. Banco de Dados em Processo:
    Execute consultas diretamente no seu script Python, sem configurações complexas.
  2. Otimização Analítica:
    Armazena dados em formato colunar, ideal para operações como GROUP BY e JOIN.
  3. SQL Completo:
    Use sintaxe SQL padrão para manipular dados, portanto facilitando a sua adoção.
  4. Velocidade e Eficiência:
    Paraleliza automaticamente operações, assim como trabalha com dados em disco ou memória.
  5. 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

Guia para Usar o DuckDB em Python
Duckdb
RecursoDuckDBPandas
ArmazenamentoColunar (ideal para análises)Linha (genérico)
VelocidadeEm contraste com o Pandas, o DuckDB processa dados em paralelo, otimizando consultas complexas.Processamento single-thread
Dados GrandesComo 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.
SQLSuporte nativoRequer 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:


Comentários

Deixe uma resposta