我如何使用FreeFormTextRecordRecordWriter

时间:2019-03-27 08:20:20

标签: apache-nifi

我是我的Nifi控制器,我想配置FreeFormTextRecordSetWriter,但是我不知道应该在"Text"字段中输入什么。我正在从源代码中获取文本(在我的情况下为GetSolr),我只想写这段句号。 文档和邮件列表似乎没有告诉我如何完成此操作,对您有所帮助。

编辑:这是我想要实现的示例输入和输出(如您所见:不需要转换,纯文本,没有JSON输入)

编辑:我现在意识到,我不能告诉GetSolr仅返回CSV数据-但我必须使用Json 因此,使用属性引用似乎很好。文档遗漏的是$ {flowFile}属性应包含返回的完整流文件。

样本输入:

{
  "responseHeader": {
    "zkConnected": true,
    "status": 0,
    "QTime": 0,
    "params": {
      "q": "*:*",
      "_": "1553686715465"
    }
  },
  "response": {
    "numFound": 3194,
    "start": 0,
    "docs": [
      {
        "id": "{402EBE69-0000-CD1D-8FFF-D07756271B4E}",
        "MimeType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
        "FileName": "Test.docx",
        "DateLastModified": "2019-03-27T08:05:00.103Z",
        "_version_": 1629145864291221504,
        "LAST_UPDATE": "2019-03-27T08:16:08.451Z"
      }
    ]
  }
}

想要的输出

{402EBE69-0000-CD1D-8FFF-D07756271B4E}

顺便说一句:文档中说:

  

写入结果时要使用的文本。此属性将使用记录中可用的任何字段来评估表达式语言。   支持表达式语言:true(将使用流文件属性和变量注册表进行评估)

我想使用来源的文字,所以很困惑

1 个答案:

答案 0 :(得分:2)

您需要使用表达式语言,就像记录的字段是FlowFile的属性一样。 示例:

输入:

{
  "t1": "test",
  "t2": "ttt",
  "hello": true,
  "testN": 1
}
Text中的

FreeFormTextRecordSetWriter属性:

${t1} k!${t2} ${hello}:boolean

${testN}Num

输出(使用ConvertRecord):

test k!ttt true:boolean

1Num

编辑:

似乎您需要的是从Solr读取并编写一列csv。您需要使用CSVRecordSetWriter。至于一样 我应该告诉您考虑升级到1.9.1。从1.9.0开始,可以为您推断模式。

否则,您可以将Schema Access Strategy设置为Use 'Schema Text' Property 然后,在“架构文本”中使用以下架构

{
  "name": "MyClass",
  "type": "record",
  "namespace": "com.acme.avro",
  "fields": [
    {
      "name": "id",
      "type": "int"
    }
  ]
}

这应该有效 我将其编辑为答案。如果它适合您,请选择我的答案:)