Criando transformações JOLT avançadas

Aprenda como funcionam as transformações avançadas do JOLT (cardinality, modify-overwrite-beta, modify-default-beta).

O JOLT pode ser usado para diversos tipos de transformações, das mais básicas às mais avançadas. Neste documento, exploramos operações avançadas, que permitem:

  • Converter objetos em listas (e vice-versa).

  • Inserir valores padrão ou substituir valores existentes.

  • Aplicar funções de string, numéricas, de conversão de tipo e de listas diretamente durante a transformação.

Entendendo as operações avançadas do JOLT

Nesta seção, você aprenderá como cada operação avançada do JOLT funciona — cardinality, modify-overwrite-beta e modify-default-beta — e quando usá-las.

cardinality

A operação cardinality é usada para converter um objeto simples em uma lista de objetos ou transformar uma lista de volta em um único objeto.

Ao converter uma lista em um objeto único, apenas o primeiro elemento da lista é preservado.

Exemplo 1 — Convertendo um objeto em uma lista

  • Caso de uso: Padronizar a estrutura dos dados de produto para que eles sempre apareçam como uma lista, mesmo quando apenas um item é fornecido.

  • Objetivo: Converter o objeto products em um array contendo um único elemento.

JSON de entrada

{
 "products": {
   "name": "Product A",
   "id": "123-A",
   "value": 10
 }
}

JSON de saída desejado

Spec de transformação

Explicação

A operação cardinality altera como o JOLT interpreta a estrutura de um campo. Ao definir "products": "MANY", indicamos ao JOLT que products deve sempre ser tratado como uma lista, mesmo que a entrada contenha apenas um único objeto.

O JOLT então envolve o objeto products existente dentro de um array, produzindo uma estrutura de lista consistente na saída. Isso é útil quando o payload às vezes inclui um item e às vezes muitos, mas a integração exige que o campo sempre se comporte como uma lista.

Exemplo 2 — Convertendo uma lista em um objeto simples

  • Caso de uso: Simplificar respostas de produto convertendo listas em um único objeto quando apenas o primeiro item é relevante para o processamento posterior.

  • Objetivo: Transformar o array products em um único objeto contendo apenas seu primeiro elemento.

JSON de entrada

JSON de saída desejado

Spec de transformação

Explicação

A operação cardinality permite controlar se um campo deve ser tratado como um objeto único ou uma lista. Ao definir "products": "ONE", informamos ao JOLT que o campo products deve ser interpretado como um único objeto, mesmo quando a entrada fornece uma lista.

O JOLT então pega apenas o primeiro elemento do array e o retorna como um objeto. Isso é útil quando você espera apenas um item, mas a entrada pode, às vezes, chegar dentro de uma lista.

modify-default-beta e modify-overwrite-beta

Essas operações permitem referenciar valores de forma dinâmica dentro do JSON. A diferença entre elas é:

  • modify-default-beta adiciona um valor somente se o campo ainda não existir.

  • modify-overwrite-beta sempre substitui o valor do campo, independentemente de ele existir. Além disso, ela permite aplicar funções para transformar valores no JSON.

Essas funções são agrupadas nas seguintes categorias:

Funções de string

  • toLower, toUpper, concat, join, split, substring, trim, leftPad, rightPad

Funções numéricas

  • min, max, abs, avg, intSum, doubleSum, longSum, intSubtract, doubleSubtract, longSubtract, divide, divideAndRound

Funções de tipo

  • toInteger, toDouble, toLong, toBoolean, toString

  • recursivelySquashNulls, squashNulls, size

Funções para listas

  • firstElement, lastElement, elementAt, toList, sort

Exemplo prático

  • Caso de uso: Aplicar múltiplas transformações para enriquecer e normalizar um JSON complexo contendo strings, números, listas e tipos mistos.

  • Objetivo: Gerar uma saída refinada formatando textos, manipulando valores numéricos, convertendo tipos, removendo campos nulos, extraindo elementos de listas e ordenando arrays — tudo em uma única transformação.

JSON de entrada

JSON de saída desejado

Spec de transformação

Explicação

Este exemplo usa a operação modify-overwrite-beta para aplicar múltiplas transformações em diferentes tipos de dados, tudo em uma única etapa. A transformação faz o seguinte:

Seção STRING

  • Converte valores de string para letras minúsculas e maiúsculas.

  • Cria novos campos por meio de concatenação, junção (join) e separação (split) de valores existentes.

  • Extrai substrings usando substring.

  • Preenche valores com caracteres usando leftPad.

  • Remove espaços extras com trim.

Seção NUMBER

  • Calcula mínimo, máximo, soma, subtração, média e valor absoluto.

  • Realiza divisão e divisão arredondada com divideAndRound.

Seção TYPE

  • Converte valores para integer, boolean e string.

  • Remove campos null dentro de objetos aninhados usando recursivelySquashNulls.

  • Substitui o campo "stringBoolean" pelo seu tamanho.

Seção LIST

  • Extrai o primeiro, último e elementos específicos de um array.

  • Converte um único campo em uma lista usando toList.

  • Ordena valores de array alfabeticamente com sort.

No geral, esta transformação demonstra como modify-overwrite-beta pode ser usada para enriquecer dados, limpar campos, calcular valores numéricos, normalizar tipos e organizar listas — tudo em uma única operação.

Notas adicionais

Algumas funções não aparecem no exemplo de transformação porque seguem o mesmo padrão de uso. Por exemplo, doubleSum e longSum funcionam exatamente como intSum.

Sobre as funções de tratamento de nulos:

  • recursivelySquashNulls remove todos os campos com valores nulos em qualquer nível de profundidade.

  • squashNulls remove campos nulos apenas um nível abaixo do objeto ou lista atual.

Comportamento em cascata

A operação modify-overwrite-beta aplica as transformações na ordem em que aparecem. Isso significa que cada transformação pode utilizar os valores produzidos pelas anteriores — um comportamento conhecido como cascata.

O exemplo a seguir demonstra isso de forma clara.

JSON de entrada

Spec de transformação

Como funciona

  1. Primeira operação: Tanto name quanto country são transformados no próprio campo.

    • "MARIA" se torna "maria"

    • "brazil" permanece "brazil"

  2. Segunda operação: A transformação cria o campo name_country concatenando os valores já atualizados de name e country. Como a primeira operação já foi concluída, a função recebe os valores transformados.

Resultado

Continue aprendendo

Agora que você explorou as operações avançadas, veja como esses conceitos funcionam na prática acessando nossos exemplos de casos de uso, onde cada transformação é aplicada a cenários reais de integração.

Atualizado

Isto foi útil?