DuckDB com DBeaver
O Profico-HQ é meu projeto pessoal onde faço alguns estudos sobre a arrecadação de recursos para a produção de quadrinhos em platformas de financiamento coletivo.
Meu fluxo básico de trabalho é:
- Obter os dados nas plataformas de financiamento coletivo usando alguns scripts.
- Como a estrutura destes dados é diferente em cada plataforma, eu transformo com alguns scripts os dados obtidos para um formato comum.
- E, com mais alguns scripts, carrego estes dados sanitizados em banco de dados, onde posso fazer consultas e análises mais elaboradas.
A seguir, apresento duas ferramentas úteis para trabalhar com os dados em meu ambiente Linux: DuckDB e DBeaver.
Banco de Dados: DuckDB
Para o projeto, escolhi trabalhar com o banco de dados DuckDB, que possui API em Python. A conexão com um arquivo de banco de dados é bem trivial:
Abrir conexão
con = duckdb.connect("CAMINHO_DO_ARQUIVO")
Executar comandos (sem retorno de dados)
Com o objeto de conexão, fica fácil enviar comandos SQL, tal como criar uma tabela:
con.sql("CREATE TABLE Autor...")
Ou carregar dados com o comando INSERT:
con.sql("INSERT INTO Autor ...")
Executar comandos com retorno de dados
Com o método fetchone(), a primeira linha do comando SELECT será retornada na forma de tupla:
res = con.sql("SELECT * FROM Autor").fetchone()
Ou você pode trazer tudo para a memória e obter uma lista de tuplas com o método fetchall():
lista = con.sql("SELECT * FROM Autor").fetchall()
Até aqui, nada muito diferente do que se esperaria de uma API para trabalhar com banco de dados. Mas uma coisa que eu gostei foi poder obter os dados num dataframe do pandas:
df = con.sql('''
SELECT campanha_modalidade
, COUNT(1) qtd
, MIN(ano) min_ano
, MAX(ano) max_ano
FROM cte_campanhas
GROUP BY campanha_modalidade
''').to_df()
E, se precisar, voltar a trabalhar com esse dataframe em SQL:
res = duckdb.sql('SELECT min(min_ano) min_ano, max(max_ano) max_ano FROM df').fetchone()
valores_mapeados['min_ano'] = str(res[0])
valores_mapeados['max_ano'] = str(res[1])
No código acima, note que em vez de con, eu usei duckdb. E na cláusula FROM, o nome da variável do dataframe que queria manipular com SQL.
Ambiente integrado: DBeaver Community
O DuckDB é operável com a CLI API, mas existem momentos em que um ambiente integrado brilha. Para isso, gostei do DBeaver Community.
Abrir conexão
Para abrir uma conexão com um banco de dados, você pode:
- Clicar no menu File > New, você tem acesso ao Wizard para abrir uma conexão conforme o tipo de banco de dados que vai trabalhar.
- Clicar no ícone da barra de ferramentas “New Database Connection”.
- Acionar as teclas de atalho Ctrl+Shift+N.
Se você acionou File > New, será necessário informar que tipo de Wizard deseja (passo 1). Caso contrário, já será direcionado para o passo 2, abaixo:
-
Selecionar o Wizard de Database Connection (só passa por aqui se clicar em File > New)

-
Selecionar o tipo de banco de dados

-
Informar os parâmetros de conexão

Inspecionar objetos do banco de dados
O ambiente integrado exibe algumas janelas, uma delas é a “Database Navigator”, que lista todas as conexões com bancos de dados que você porventura tenha aberto.
Ao expandir as conexões, é possível inspecionar os objetos dentro do banco de dados, tal como tabelas, views ou índices.

Executar queries e inspeção de resultados
O DBeaver também conta com um editor de SQL com marcação colorida de sintaxe, bem como a apresentação de dados em grid.
Para abrir um arquivo de SQL:
- Acionar o ícone “Open SQL script (existing or new one)”
- Na janela “Database Navigator”, selecionar uma conexão, clicar com o botão direito, SQL Editor, então New SQL Script.
