trilha

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

Buscar

Busca por título, seção e texto das notas