NiFi:ExecuteSQL处理器中的参考FlowFile内容

时间:2019-04-18 18:01:34

标签: sql apache-nifi

是否可以在后续的ExecuteSQL处理器中引用FlowFile的内容?

例如:

  • 我正在使用GenerateTableFetchExecuteSQL来轮询数据库表。
  • 接下来,我使用QueryRecord来转换结果-具体来说,使用MAX()GROUP BY操作,因为我不能在GenerateTableFetch处理器上使用此运算符。

SELECT
    hu_id
    ,wh_id
    ,MAX(audit_timestamp) AS "newest_timestamp"
FROM FLOWFILE
GROUP BY
    hu_id
    ,wh_id
  • 我很希望能够使用另一个ExecuteSQL做类似的事情:

SELECT
    FLOWFILE.hu_id
    ,FLOWFILE.wh_id
    ,FLOWFILE.newest_timestamp
    ,hum.status
    ,hum.location_id
FROM FLOWFILE
INNER JOIN AAD.dbo.t_hu_master hum ON
    FLOWFILE.hu_id = hum.hu_id
    AND FLOWFILE.wh_id = hum.wh_id

...有效地引用Avro FlowFile内容以执行多联接。

如果这不可能,那么是否有一个优雅的解决方法?到目前为止,我能想到的唯一解决方案是...

  1. SplitAvro
  2. ConvertAvroToJSON
  3. EvaluateJSONPath
  4. ReplaceText(使用wh_idhu_id创建一堆单独的SQL SELECT语句),然后...
  5. ExecuteSQL

任何想法或见解都受到赞赏!

1 个答案:

答案 0 :(得分:2)

在即将发布的1.10.0版本中,您将能够使用LookupRecord和新的DatabaseRecordLookupService(请参见NIFI-6082)从数据库中进行查找,这实际上可以进行联接。同时,我认为您将需要类似的东西或脚本处理器(请参阅ExecuteGroovyScript的“其他详细信息”页面)来自己进行查找。