Объедините две схемы в одну в Apache nifi

Я пытаюсь объединить два файла csv в json с помощью Apache nifi. Два csv-файла - это person.csv, содержащие информацию о людях:

Id|Name|Surname
ABC-123|John|Smith
ABC-111|Allan|Wood
ABC-001|Grace|Kelly

И второй csv содержит список мероприятий, в которых участвовали эти люди:

EId|PId|Date|Desc
1|ABC-123|2017-05-01|"Groove party"
2|ABC-111|2017-06-01|"Snack No. One"
3|ABC-123|2017-06-01|"The night out"

Я использую поток (поток Nifi на git hub) :

  • Получить файл
  • UpdateAttribute (schema.name)
  • Разделить записи
  • ExtractText
  • UpdateAttribute (correlation.id, newschema)
  • Воронка
  • MergeRecords / Слияние содержимого
  • PutFile

Попытка достичь финального json:

{
"Person": {
    "Id": "ABC-123",
    "Name": "John",
    "Surname": "Smith",
    "Events": [{
        "Date": "2017-05-01",
        "Name": "Groove party"
    }, {
        "Date": "2017-06-01",
        "Name": "The night out"
    }]
}
}

Но я не уверен, как настроить запись слияния или как объединить несколько строк csv после слияния содержимого в один json. Есть способ как это сделать?


person Vaasha    schedule 04.05.2018    source источник


Ответы (1)


Вы действительно можете добиться этого, используя

1- ConvertRecord (CSV в JSON) - с использованием схемы Avro в вашем случае

CSVReader

JsonRecordSetWriter

AvroSchemaRegistry

   {
 "name": "person",
 "namespace": "nifi",
 "type": "record",
 "fields": [
 {"name": "Id" , "type" : "string"},
 {"name": "Name" , "type" : "string"},
 {"name": "Surname" , "type" : "string"}
 ]
}
  • 2 - SplitJson
  • 3 - EvaluateJson
  • 4 - Атрибут Lookup (Получить Desc SimpleCsvFileLookupService)
  • 5 - LookupAttribute (Get Date SimpleCsvFileLookupService)
    • 6 - AttriutetoJson
person Up_One    schedule 07.05.2018