NiFi Как объединить контент в один ряд CSV - PullRequest
1 голос
/ 31 января 2020

Я новичок в использовании Nifi и у меня возникла проблема при объединении двух CSV-файлов в одну строку CSV. Я прошу прощения, если на этот вопрос был дан ответ ниже. Но я попытался просмотреть весь inte rnet, но не смог найти решение, определяющее c для моей потребности.

Так вот проблема: у меня есть данные в формате Json и мне нужно преобразовать данные в CSV, и выходной файл должен быть плоским CSV-файлом.

Я начинаю с Json Данные, которые выглядят так:

{"header": {"messageId": "xxx", "name":"xxx",..}, "content": {"TimeStamp":"xxx",..}}

Я первый разделите сообщение json на его заголовок и компоненты содержимого и используйте ConvertRecord для преобразования данных из json в csv. Я понял это до этой части.

Две записи csv выглядят так:

раздел содержимого от json до csv

раздел заголовка от json до CSV

Затем я использую процессор MergeContent для объединения двух данных CSV, чтобы, надеюсь, получить единственные данные CSV с данными заголовка и содержимого в одной строке (с заголовком в строке 1 и значениями в ряду 2). Однако при слиянии содержимого я получаю результаты слияния от процессора MergeContent

Как видите, заголовки из раздела заголовка 'header' находятся в строке 1, а заголовки из ' раздел содержимого находится в строке 3, а значения - в строке 2 и 4 соответственно. Но я хочу, чтобы и заголовки раздела 'header' и раздела 'content' были в строке 1, а значения обоих разделов - в строке 2.

Является ли мой подход к решению проблемы неправильно? Есть ли лучший подход к этой проблеме? Кроме того, что я могу сделать, чтобы исправить этот текущий подход, чтобы получить желаемый результат?

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

1 Ответ

1 голос
/ 31 января 2020

Может быть, другой подход. Представьте, что у нас есть JSON, который выглядел как:

{
  "part1": {
    "A": "A1",
    "B": "B1"
  },
  "part2": {
    "X": "X1",
    "Y": "Y1"
  }
}

, и вы хотели, чтобы CSV выглядел так:

A,B,X,Y
A1,B1,X1,Y1

, тогда мы могли бы решить эту головоломку, переработав оригинальную JSON к новому JSON описанию, которое выглядит следующим образом:

{
  "A":"A1",
  "B":"B1",
  "X":"X1",
  "Y":"Y1"
}

тогда мы можем использовать наш JSON в CSV конвертер, который должен произвести формат, который вы ищете.

Для преобразования Исходный JSON до желаемого JSON мы могли бы использовать JoltTransformJSON процессор. Пример спецификации может быть:

[{
    "operation": "shift",
    "spec": {
        "part1": {
          "*": "&"
        },
        "part2": {
          "*": "&"
        }
    }
}]
...