MinIO na Prática
Instalação, configuração, integração com GAIO, ClickHouse e envio de dados via Python
Para ter acesso as gravações, se registre em: Grupo de Estudos
Rodrigo Granado Bittencourt | Alessandro Binhara
Azuris Company — Março de 2026
Acelerando o S3: Alta Performance com MinIO
1. O que é o MinIO?
MinIO é um sistema de armazenamento de objetos de alto desempenho, código aberto e compatível com a API do Amazon S3. Foi projetado para funcionar tanto em nuvem nativa quanto em infraestrutura local (on-premise), permitindo armazenar grandes volumes de dados não estruturados — como arquivos Parquet, CSVs, backups, logs e imagens — com escalabilidade e velocidade.
Por ser compatível com S3, qualquer ferramenta que se integra ao Amazon S3 também funciona com MinIO sem alteração de código. Isso inclui o ClickHouse, Python (biblioteca minio), Apache Spark, dbt e o próprio GAIO.
2. Instalação no Linux
A versão utilizada neste documento é a de Abril de 2025. Os comandos abaixo realizam o download do binário, ajustam as permissões e movem para o diretório padrão do sistema:
Download e instalação do binário
Configuração do serviço (usuário e senha)
As credenciais de acesso ao MinIO são definidas no arquivo de serviço do systemd. Para editar:
Dentro do arquivo, as variáveis MINIO_ROOT_USER e MINIO_ROOT_PASSWORD definem o usuário e senha de acesso ao console e à API.
3. Acessando o MinIO
O MinIO expõe duas portas distintas, com propósitos diferentes:
Criando chaves de acesso
Para conectar ferramentas externas ao MinIO (GAIO, Python, ClickHouse), é necessário criar chaves de acesso (Access Key e Secret Key) — diferentes das credenciais de login do console. Para isso:
- Acesse o console em http://(seu-servidor):9001
- No menu lateral, acesse Access Keys
- Clique em Create Access Key
- Copie e guarde a Access Key e a Secret Key geradas

4. Integração com o GAIO
Adicionando o MinIO como fonte de dados
Para conectar o GAIO ao MinIO, acesse as configurações de Data Sources e adicione uma nova fonte do tipo S3/MinIO. Os campos necessários são:
Criando uma tabela de resultado no GAIO
Após adicionar a fonte, é necessário criar uma tabela de resultado dentro de um projeto para que os dados do MinIO fiquem acessíveis para consultas e fluxos:
- No menu lateral do GAIO, acesse Fontes e Armazenamento
- Selecione a fonte do MinIO recém-criada
- Clique em Adicionar tabela de resultado
- Defina o nome da tabela e o bucket/prefixo de destino O GAIO permite consultar arquivos Parquet diretamente do MinIO usando SQL. A conexão exige as chaves de acesso e o caminho do bucket:
Criando tabela permanente a partir do MinIO
Para transformar os dados do Parquet em uma tabela persistente dentro do GAIO (evitando consultar o MinIO a cada acesso):
Criando fluxos no GAIO
Além de consultas SQL diretas, o GAIO permite criar fluxos que combinam leitura do MinIO com transformações e carga em tabelas de resultado. Há duas abordagens principais:
- Via SQL: usando SELECT com a função s3() como fonte e INSERT INTO como destino
- Via conector MinIO: criando um fluxo visual que aponta diretamente para um bucket, sem escrever SQL manualmente O GAIO Data OS permite criar fluxos visuais de carga que leem dados diretamente do MinIO e gravam em tabelas do ClickHouse, sem necessidade de scripts externos
Etapa 1 — Criar a tabela de destino no ClickHouse
Antes de carregar, defina a tabela onde os dados serão armazenados. Isso pode ser feito via SQL no próprio GAIO:
Etapa 2 — Criar o fluxo de carga
Há duas formas de montar o fluxo:
Via SQL direto:
Via conector visual:
No GAIO, crie um novo fluxo, selecione a fonte MinIO como origem e a tabela do ClickHouse como destino. O mapeamento de colunas pode ser feito arrastando os campos da origem para o destino. Ao executar o fluxo, os dados são transferidos automaticamente.
Quando usar cada abordagem:
Para arquivos grandes em formato Parquet, o wildcard permite carregar todos os arquivos de uma vez:
Essa abordagem é ideal para pipelines que enviam dados em lotes (como o exemplo do MongoDB na seção anterior), onde cada lote gera um arquivo part_0001.parquet, part_0002.parquet etc. O ClickHouse lê todos de uma vez e consolida em uma única tabela.
5. Enviando Arquivos para o MinIO via Python
Instalação da dependência
Inserção manual pelo console
Para envios pontuais, o próprio console web do MinIO oferece upload direto:
- Acesse http://(seu-servidor):9001
- Entre no bucket desejado
- Clique em Upload e selecione arquivo ou pasta
Envio de CSV via Python
Exemplo mínimo para enviar um arquivo CSV local para um bucket no MinIO:
Envio de Parquet em memória (sem disco)
Para volumes grandes, a abordagem mais eficiente é converter o DataFrame diretamente para Parquet em memória e enviar ao MinIO sem gravar nada em disco. O BytesIO cria um buffer temporário na RAM que é descartado após o upload:
O fluxo completo em memória é:
Envio em lotes de grande volume (MongoDB → MinIO)
Para volumes bilionários, a pipeline lê o MongoDB em lotes de 50.000 documentos, acumula até 500.000 registros e envia cada lote como um arquivo Parquet separado:
Conclusão
O MinIO se mostrou uma solução eficiente e acessível para armazenamento de dados em larga escala. Sua compatibilidade nativa com a API S3 elimina a necessidade de adaptações ao integrar com ferramentas como GAIO, ClickHouse e Python. A combinação com o formato Parquet — colunar, comprimido e tipado — torna a pipeline mais performática e escalável, reduzindo custos de armazenamento e tempo de consulta.
O envio de dados em memória via BytesIO garante que nenhum arquivo temporário seja criado em disco, o que é essencial para processamento de volumes bilionários em servidores com espaço limitado.