在Apache nifi中将两个模式合并为一个模式

时间:2018-05-04 21:03:37

标签: merge apache-nifi

我正在尝试使用Apache nifi将两个csv文件合并到一个json中。 两个csv是包含人员信息的persons.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 flow on git hub)流程:

  • 的GetFile
  • UpdateAttribute(schema.name)
  • 拆分记录
  • ExtractText
  • UpdateAttribute(correlation.id,newschema)
  • 漏斗
  • MergeRecords / Merge Content
  • 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"
    }]
}
}

但是我不确定如何设置合并记录,或者如何在将内容合并到单个json之后加入多个csv行。有办法怎么做?

1 个答案:

答案 0 :(得分:3)

您可以使用

实际实现此目的

1- ConvertRecord (CSV到JSON) - 在您的情况下使用Avro Schema

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 - LookupAttribute(Get Desc SimpleCsvFileLookupService)
  • 5 - LookupAttribute(获取日期SimpleCsvFileLookupService)
    • 6 - AttriutetoJson