Output GCS
Grava as mensagens em arquivos dentro de um bucket do Google Cloud Storage. É o Output usado para alimentar um data lake.
Diferente do SFTP e do SMB, aqui o arquivo é fechado por tempo decorrido, tenha chegado mensagem nova ou não.
Campos
| Campo | O que é | Padrão |
|---|---|---|
| Bucket GCS | Nome do bucket de destino. | — |
| Prefixo do objeto (opcional) | Um caminho fixo antes do nome do arquivo. Ex.: sistema/. | vazio |
| Template do nome | Como o caminho e o nome do arquivo são montados. Use / no template para criar partições no estilo Hive. Aceita funções de data e formatação — lista completa em masterminds.github.io/sprig. | — |
| Segundos por arquivo (roll) | De quanto em quanto tempo o arquivo é fechado e um novo é aberto. | 300 |
| Formato do arquivo | JSON (NDJSON) grava um Value por linha. Parquet grava em formato colunar, mais eficiente para consultas analíticas. | JSON (NDJSON) |
| Colunas de ordenação | (só no formato Parquet) Colunas pelas quais as linhas do arquivo são ordenadas. Digite o nome e pressione Enter para adicionar. Ordenar melhora a compressão e a velocidade de leitura por essas colunas. | vazio |
Exemplo de template com partições
dt_referencia={{ now | date "2006-01-02" }}/hr_referencia={{ now | date "15" }}/arquivo_{{ now | date "20060102T150405Z" }}.parquet
Gera caminhos assim:
dt_referencia=2026-07-26/hr_referencia=14/arquivo_20260726T143000Z.parquet
Ferramentas de consulta (BigQuery, Spark, Athena) reconhecem esse formato e conseguem pular arquivos inteiros ao filtrar por data — é o que torna a consulta barata.
O que este Output precisa ler do tópico
| Parte | Como é usada |
|---|---|
| Value | O conteúdo gravado no arquivo |
| Key | Não é usada |
| Headers | Não são usados |
O que o Value precisa ser depende do formato escolhido:
| Formato | Exigência sobre o Value |
|---|---|
| JSON (NDJSON) | Qualquer coisa. É gravado como está, uma linha por mensagem. |
| Parquet | Um objeto JSON plano. Um Value que não seja JSON válido é descartado e registrado no log. |
Exemplo 1 — formato JSON
Mensagens lidas do tópico:
Value: {"pedido":1234,"cliente":"ACME","total":199.90}
Value: {"pedido":1235,"cliente":"Contoso","total":88.00}
Arquivo gravado no bucket:
{"pedido":1234,"cliente":"ACME","total":199.90}
{"pedido":1235,"cliente":"Contoso","total":88.00}
Exemplo 2 — formato Parquet
As mesmas mensagens viram uma tabela colunar:
| pedido | cliente | total |
|---|---|---|
| 1234 | ACME | 199.90 |
| 1235 | Contoso | 88.00 |
As colunas são descobertas a partir da primeira mensagem do arquivo. Isso tem uma consequência prática: se as mensagens não tiverem sempre o mesmo conjunto de campos, os campos ausentes na primeira mensagem não entram no arquivo. Padronize a estrutura antes, com um Transform, se necessário.
Uma mensagem de Value vazio vira uma linha em branco no formato JSON, e é descartada com aviso no log no formato Parquet — veja Mensagens de Value vazio.
Como o arquivo é finalizado
O relógio de Segundos por arquivo (roll) não é reiniciado a cada mensagem: passados X segundos desde a abertura, o arquivo é fechado e enviado ao bucket, e o próximo Value abre um novo.
Isso torna o intervalo previsível — com 300, você tem um arquivo a cada cinco minutos — mas
também significa que um período sem movimento pode gerar arquivos pequenos ou vazios.