Tecnologias/02 - Bancos de Dados/04 - Colunares/02 - DuckDB2 min
Parquet e S3 com DuckDB
Definição
DuckDB pode executar SQL diretamente sobre arquivos Parquet. read_parquet apresenta
o conteúdo como uma relação consultável. Não é necessário copiar os dados para uma
tabela interna antes de cada análise.
Uma consulta direta lê a fonte externa. CREATE TABLE ... AS SELECT, por sua vez,
materializa o resultado em uma tabela do banco, que não se atualiza automaticamente
quando o arquivo original muda.
Referência: leitura e escrita de Parquet.
Exemplo local completo
Os comandos abaixo criam dados de exemplo, escrevem um arquivo no diretório atual e consultam esse arquivo. Execute em um diretório de trabalho próprio.
CREATE TABLE eventos (
caminho VARCHAR,
duracao_ms INTEGER
);
INSERT INTO eventos VALUES
('/produtos', 80),
('/produtos', 120),
('/carrinho', 200);
COPY eventos TO 'eventos.parquet' (FORMAT PARQUET);
SELECT caminho, COUNT(*) AS acessos, AVG(duracao_ms) AS media_ms
FROM read_parquet('eventos.parquet')
GROUP BY caminho
ORDER BY caminho;
O resultado contém /carrinho com 1 acesso e média 200 e /produtos com 2 acessos e
média 100. Os dados consultados vêm do Parquet escrito por COPY.
Leitura no S3
Com o suporte de acesso ao S3 disponível e a autenticação configurada, a fonte pode ser um objeto remoto:
SELECT caminho, COUNT(*) AS acessos
FROM read_parquet('s3://meu-bucket/eventos/2026-09-15.parquet')
GROUP BY caminho;
O endereço é ilustrativo. O acesso usa o suporte do httpfs e, para objetos privados,
credenciais e permissões apropriadas. Secrets podem configurar a autenticação sem
colocar chaves no texto da consulta.
Referência: suporte à API S3.
Quem faz o quê
| Componente | Responsabilidade |
|---|---|
| S3 | Armazenar e disponibilizar o objeto |
| Parquet | Organizar as colunas e metadados dentro do arquivo |
| DuckDB | Planejar a consulta, ler os dados e calcular o resultado |
Executar a consulta no computador local não desloca automaticamente o processamento para a AWS. A leitura remota também depende de rede, latência e volume transferido. Muitos arquivos pequenos podem aumentar o trabalho de abertura e leitura de metadados.
Aprofundamento aplicado
Reprodutibilidade exige identificar a entrada
Uma consulta em eventos/*.parquet pode ler um conjunto diferente amanhã se novos
arquivos chegarem. Para reproduzir um relatório, registre a lista ou versão dos arquivos,
o schema interpretado e os parâmetros. Uma tabela de snapshots, como Iceberg, fornece
outro mecanismo para fixar a versão lógica.
Arquivo remoto: latência por requisição também conta
Parquet permite projetar colunas e aproveitar estatísticas para evitar leitura. Muitos arquivos pequenos, porém, acrescentam abertura e leitura de metadados. Mesmo uma consulta que devolve poucas linhas pode precisar de várias requisições remotas. Referência: leitura de Parquet.
Exercício: use o mesmo conjunto de dados em poucos arquivos maiores e muitos menores; compare uma agregação global e um filtro seletivo. Resultado esperado: diferencie bytes úteis, quantidade de arquivos e tempo de acesso. O melhor arranjo pode variar entre as duas consultas.
Ao materializar o resultado em tabela local, registre o instante e a entrada da carga. A tabela passa a ser uma cópia que exige atualização deliberada para acompanhar a origem.
Relacionado: 1. Amazon S3 · 2. Apache Parquet e Consultas no S3 · 2. Armazenamento Colunar e Execução no DuckDB.
Parte de DuckDB