A maioria dos pipelines de dados de streaming exige transformações de dados. Alguns usuários preferem transformar os dados depois que eles chegam ao destino em um pipeline de extração, carga e transformação (ELT), enquanto outros optam por transformar os dados antes da ingestão em um pipeline de extração, transformação e carga (ETL). Tradicionalmente, essa arquitetura exigia pipelines complexos com ferramentas como o Dataflow ou o Apache Flink para realizar transformações de dados.
O Pub/Sub oferece transformações de mensagens únicas (SMTs, na sigla em inglês) para simplificar as transformações de dados para pipelines de streaming. Os SMTs permitem modificações leves nos dados e atributos de mensagens diretamente no Pub/Sub. As SMTs eliminam a necessidade de outras etapas de processamento de dados ou produtos de transformação de dados separados.
Casos de uso de SMTs
Imagine uma loja on-line que quer oferecer aos clientes recomendações personalizadas de produtos enquanto eles navegam pelo site. Para fazer isso, use o Pub/Sub para coletar dados em tempo real sobre a atividade do cliente no site. Isso inclui dados sobre os produtos visualizados, adicionados ao carrinho e as classificações atribuídas a eles.
No entanto, esses dados brutos geralmente precisam de alguns ajustes antes de serem usados para gerar recomendações. Por exemplo, os dados brutos podem conter detalhes extranhos que são irrelevantes para seu caso de uso. Exemplos desses detalhes são o tipo de navegador do cliente ou o horário em que ele visitou o site. Os dados também podem não estar no formato necessário para o sistema de recomendação. Por exemplo, os carimbos de data/hora podem estar em formatos diferentes, ou os IDs de produtos podem precisar ser convertidos para um tipo diferente.
É possível usar SMTs do Pub/Sub para fazer transformações de dados, como as seguintes:
Remova informações de identificação pessoal (PII), como nomes completos e endereços, para proteger a privacidade do cliente.
Reter apenas eventos relevantes para recomendações, como visualizações e compras de produtos, e descartar outros, como mudanças no perfil do cliente.
Verifique se todos os carimbos de data/hora, valores de moeda e IDs de produtos seguem um formato e tipo consistentes compatíveis com o sistema de recomendação.
Gere novos campos de dados a partir de dados brutos, como o valor total do carrinho de compras ou o tempo de permanência na página do produto.
Em resumo, as SMTs permitem uma ampla gama de casos de uso, incluindo:
Mascara e edição de dados: proteja dados sensíveis mascarando ou editando campos como números de cartão de crédito ou PII, ajudando a cumprir os regulamentos de privacidade de dados.
Conversão de formato de dados: transforme dados entre formatos diferentes para garantir a compatibilidade com sistemas downstream.
Filtragem de mensagens: processe apenas mensagens relevantes, filtrando as indesejadas com base no conteúdo ou nos atributos. Os SMTs permitem condições de filtragem mais complexas do que os filtros integrados do Pub/Sub.
Transformações simples de dados: realize tarefas básicas de manipulação de dados, como manipulação de strings, formatação de data ou operações matemáticas.
Exemplo de fluxo de mensagens para SMTs
A imagem mostra um exemplo de sistema do Pub/Sub com SMTs aplicadas nos níveis de tópico e de assinatura.

O procedimento a seguir mostra como as mensagens fluem no sistema do Pub/Sub:
Os aplicativos do editor Editor 1 e Editor 2 publicam as mensagens A e B, respectivamente, no tópico do Pub/Sub.
As SMTs do tópico transformam as mensagens A e B em mensagens A' e B', respectivamente.
Se um esquema estiver anexado ao tópico, as mensagens transformadas A e B serão validadas em relação ao esquema. Se, por exemplo, A' não corresponder ao esquema, a publicação da mensagem A vai falhar com um erro.
As mensagens transformadas A' e B' são gravadas no armazenamento do Pub/Sub.
O Pub/Sub entrega as mensagens A e B para todas as assinaturas anexadas, que são Assinatura 1 e Assinatura 2, conforme mostrado na imagem.
Se a Assinatura 1 tiver um filtro configurado, as mensagens A e B serão avaliadas de acordo com o filtro. Somente as mensagens que correspondem ao filtro vão para a próxima etapa. Outras mensagens são reconhecidas automaticamente pelo Pub/Sub.
Se a Assinatura 2 tiver um filtro configurado, as mensagens A e B serão avaliadas em relação ao filtro. Somente as mensagens que correspondem ao filtro vão para a próxima etapa. Outras mensagens são reconhecidas automaticamente pelo Pub/Sub.
As SMTs da assinatura 1 transformam as mensagens A e B. A' se torna A'' e B' se torna B''.
As SMTs da assinatura 2 transformam as mensagens A e B. A permanece como A e B é filtrado.
Se a assinatura 1 for uma assinatura push com descompactação de payload ativada, as mensagens A'' e B'' serão descompactadas. Se a assinatura 2 for uma assinatura por push com o desencapsulamento de payload ativado, A' será desencapsulada.
O Assinante 1 recebe a mensagem B'', o Assinante 2 recebe a mensagem A'' e o Assinante 3 recebe a mensagem A'.
Os assinantes confirmam as mensagens recebidas.
O Pub/Sub exclui as mensagens confirmadas do armazenamento.
Informações importantes sobre SMTs
Os SMTs são integrados à API Pub/Sub, permitindo que você os gerencie como parte das configurações de tópico ou assinatura.
É possível ativar até cinco SMTs em um tópico ou assinatura.
Os SMTs operam em uma única mensagem do Pub/Sub. Elas não podem agregar várias mensagens do Pub/Sub.
Quando um SMT é executado, ele usa como entrada a mensagem do Pub/Sub, incluindo os dados e atributos dela. A saída é uma mensagem transformada do Pub/Sub, com modificações nos dados ou atributos.
Se você tiver um SMT definido em uma assinatura com ordenação ativada e a execução do SMT em qualquer mensagem gerar um erro, as mensagens subsequentes para a mesma chave de ordenação não serão entregues ao assinante. Configure um tópico de mensagens inativas na assinatura para remover uma mensagem que gera um erro do backlog de mensagens e permitir que as mensagens seguintes sejam entregues.