Pular para o conteúdo principal

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

CampoO que éPadrão
Bucket GCSNome do bucket de destino.
Prefixo do objeto (opcional)Um caminho fixo antes do nome do arquivo. Ex.: sistema/.vazio
Template do nomeComo 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 arquivoJSON (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

ParteComo é usada
ValueO conteúdo gravado no arquivo
KeyNão é usada
HeadersNão são usados

O que o Value precisa ser depende do formato escolhido:

FormatoExigência sobre o Value
JSON (NDJSON)Qualquer coisa. É gravado como está, uma linha por mensagem.
ParquetUm 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:

pedidoclientetotal
1234ACME199.90
1235Contoso88.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.