A maioria das pessoas presume que os bancos de dados analíticos, ou OLAPs, são feras grandes e poderosas — e estão corretos. Sistemas como Snowflake, Redshift ou Postgres envolvem muita configuração e manutenção, mesmo em suas encarnações hospedadas na nuvem. Mas e se tudo o que você deseja são análises “suficientes” para um conjunto de dados em seu desktop? Nesse caso, vale a pena explorar DuckDB.

Análise de dados colunares em seu laptop

DuckDB é um mecanismo de banco de dados analítico pequeno, mas poderoso – um executável único e independente, que pode ser executado de forma independente ou como uma biblioteca carregável dentro de um processo host. Há muito pouco que você precisa configurar ou manter com o DuckDB. Dessa forma, é mais parecido com o SQLite do que com os maiores bancos de dados analíticos de sua classe.

DuckDB foi projetado para orientado a colunas consulta de dados. Ele ingere dados de fontes como CSV, JSON e Apache Parquet e permite consultas rápidas usando sintaxe SQL familiar. DuckDB oferece suporte a bibliotecas para todas as principais linguagens de programação, para que você possa trabalhar com ele programaticamente usando a linguagem de sua escolha. Ou você pode usar a interface de linha de comando do DuckDB, isoladamente ou como parte de um pipeline de shell.

Carregando dados no DuckDB

Ao trabalhar com dados no DuckDB, existem dois modos que você pode usar para esses dados. Modo persistente grava os dados no disco para poder lidar com cargas de trabalho maiores que a memória do sistema. Essa abordagem custa alguma velocidade. Modo na memória mantém o conjunto de dados inteiramente na memória, o que é mais rápido, mas não retém nada quando o programa termina. (SQLite pode ser usado da mesma maneira.)

DuckDB pode ingerir dados de vários formatos. Arquivos CSV, JSON e Apache Parquet são três dos mais comuns. Com CSV e JSON, o DuckDB, por padrão, tenta descobrir as colunas e os tipos de dados por conta própria, mas você pode substituir esse processo conforme necessário – por exemplo, para especificar um formato para uma coluna de data.

Outros bancos de dados, como MySQL ou Postgres, também podem ser usados ​​como fontes de dados. Você precisará carregar uma extensão DuckDB (mais sobre isso mais tarde) e fornecer uma string de conexão para o servidor de banco de dados; DuckDB não lê os arquivos desses bancos de dados diretamente. Com o SQLite, porém, você se conecta ao arquivo de banco de dados SQLite como se fosse apenas outro arquivo de dados.

Para carregar dados no DuckDB de uma fonte externa, você pode usar uma string SQL, passada diretamente para o DuckDB:


SELECT * FROM read_csv('data.csv');

Você também pode usar métodos na biblioteca de interface DuckDB para um determinado idioma. Com a biblioteca Python para DuckDB, a ingestão fica assim:


import duckdb
duckdb.read_csv("data.csv")

Você também pode consultar determinados formatos de arquivo diretamente, como Parquet:


SELECT * FROM 'test.parquet';

Você também pode emitir consultas de arquivo para criar uma visualização de dados persistente, que pode ser usada como uma tabela para diversas consultas:


CREATE VIEW test_data AS SELECT * FROM read_parquet('test.parquet');

DuckDB possui otimizações para trabalhar com arquivos Parquet, para que leia apenas o que precisa do arquivo.

Outras interfaces como ADBC ​​e ODBC também podem ser usadas. ODBC serve como um conector para ferramentas de visualização de dados como o Tableau.

Os dados importados para o DuckDB também podem ser reexportados em muitos formatos comuns: CSV, JSON, Parquet, Microsoft Excel e outros. Isso torna o DuckDB útil como ferramenta de conversão de dados em um pipeline de processamento.

Consultando dados no DuckDB

Depois de carregar os dados no DuckDB, você pode consultá-los usando expressões SQL. O formato dessas expressões não é diferente das consultas SQL regulares:


SELECT * FROM users WHERE ID>1000 ORDER BY Name DESC LIMIT 5;

Se estiver usando uma API cliente para consultar o DuckDB, você poderá passar strings SQL por meio da API ou poderá usar a API relacional do cliente para criar consultas programaticamente. Em Python, ler um arquivo JSON e consultá-lo pode ser assim:


import duckdb
file = duckdb.read_json("users.json")
file.select("*").filter("ID>1000").order("Name").limit(5)

Se você usa Python, pode usar a API PySpark para consultar o DuckDB diretamente, embora a implementação do PySpark pelo DuckDB ainda não suporte o conjunto completo de recursos.

O dialeto SQL do DuckDB segue de perto os dialetos SQL mais comuns, embora venha com algumas adições gratuitas para fins de análise. Por exemplo, colocar a cláusula SAMPLE em uma consulta permite executar uma consulta usando apenas um subconjunto de dados em uma tabela. A consulta resultante é executada mais rapidamente, mas pode ser menos precisa. DuckDB também suporta o PIVOT palavra-chave (para criar tabelas dinâmicas), funções de janela e QUALIFY cláusulas para filtrá-los e muitas outras funções analíticas em seu dialeto SQL.

Extensões DuckDB

DuckDB não está limitado aos formatos de dados e comportamentos incorporados nele. Sua API de extensão possibilita escrever complementos de terceiros para DuckDB para oferecer suporte a novos formatos de dados ou outros comportamentos.

Algumas das funcionalidades incluídas no DuckDB são implementadas por meio de complementos originais, como suporte para arquivos Parquet. Outros, como conectividade MySQL ou Postgres, ou pesquisa de similaridade vetorial, também são mantidos pela equipe do DuckDB, mas fornecidos separadamente.