Спецификация преобразования Jolt для объединения двух объектов в массиве на основе некоторого условия

#apache-nifi #jolt

#apache-nifi #jolt

Вопрос:

Я хочу объединить объекты, в которых PersonID и visitDate объектов одинаковы, иначе объект останется таким, какой он есть в массиве

Пример ввода —

 [
  {
    "personId": 1,
    "visitDate": "1453545",
    "htn": 1,
    "dm": 0
  },
  {
    "personId": 1,
    "visitDate": "1453545",
    "htn": 1,
    "dm": 1
  },
  {
    "personId": 2,
    "visitDate": "4453545",
    "htn": 1,
    "dm": 1
  },
  {
    "personId": 3,
    "visitDate": "6453545",
    "htn": 1,
    "dm": 1
  }
]
  

Пример вывода

 [
  {
    "personId": 1,
    "visitDate": "1453545",
    "htn": 1,
    "dm": 1
  },
  {
    "personId": 2,
    "visitDate": "4453545",
    "htn": 1,
    "dm": 1
  },
  {
    "personId": 3,
    "visitDate": "6453545",
    "htn": 1,
    "dm": 1
  }
]
  

Ответ №1:

Посмотрите, помогает ли приведенная ниже спецификация, разделите объект по идентификатору пользователя, а затем используйте количество элементов для удаления дубликатов, затем переместите объект в массив.

 [
  {
    "operation": "shift",
    "spec": {
      "*": "@personId[]"
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "*": {
        "@": "ONE"
      }
    }
  }, {
    "operation": "shift",
    "spec": {
      "*": {
        "@": "[]"
      }
    }
  }
]