NIFI - Удивительно, как выбрать первое ненулевое значение в массиве Json - PullRequest
0 голосов
/ 18 июня 2020

У меня есть проблема, которую я пытаюсь решить в Nifi, и мне бы очень хотелось, чтобы вы помогли найти решение. Я подумал об использовании преобразования Jolt для достижения этого, но открыт для любых других предложений

У меня есть массив Json, который выглядит следующим образом:

[
  {
    "val1": "AAA",
    "val2": "",
    "val3": "111",
    "val4": "red"
  },
  {
    "val1": "BBB",
    "val2": "2",
    "val3": "222",
    "val4": "blue"
  },
  {
    "val1": "CCC",
    "val2": "",
    "val3": "333",
    "val4": "orange"
  },
  {
    "val1": "DDD",
    "val2": "2",
    "val3": "4444",
    "val4": "green"
  }
]

, и я написал JoltSpe c

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "val1": "&",
        "val2": "&",
        "val3": "&"
      },
      "0": {
        "val4": "&"
      }
    }
  }
]

, которые преобразуют массив json в:

{
  "val4" : "red",
  "val1" : [ "BBB", "CCC", "DDD" ],
  "val2" : [ "2", "", "2" ],
  "val3" : [ "222", "333", "4444" ]
}

Однако это не совсем тот результат, который я ищу. Мне нужно, чтобы val2 было только одним значением (я хочу игнорировать все вхождения пустой строки и в основном выбирать первую доступную непустую строку.

val2 может либо пустая строка "", либо некоторая повторяющаяся строка, например "2" (здесь я использую 2 в качестве примера, но val2 может быть любым, например 3, 123 или 345 и т. д. c, но если это 123, все вхождения of val2 будет 123)

Пример желаемого результата

{
  "val4" : "red",
  "val1" : [ "BBB", "CCC", "DDD" ],
  "val2" : "2",
  "val3" : [ "222", "333", "4444" ]
}

Любая помощь будет принята с благодарностью. Заранее спасибо

1 Ответ

0 голосов
/ 18 июня 2020

Я понял это ... глупый я.

Я использовал процессор QueryRecord и использовал ORDER BY, а затем использовал JoltTransform для выбора первой записи.

...