我想使用SQL查询将数据分别作为每月CSV存储到SFTP服务器中。
例如,我的查询是:
select fooId, bar from FooBar
where query_date>=20180101 and query_date<20180201 --(for the month of January 2018)
我想将其作为20180101_FooBar.csv
存储到我的SFTP服务器上。同样,其他月份的其他文件将以相同的过程执行,但间隔为 query_date 。
要考虑的重要事项:I have to store the *fooId* as MD5 Hash string.
如何在NIFI中自动执行此流程?
大致上,我预见的流程是:
*ExecuteSQL*(but not sure how to paramterize the counter for query_date)
-> *ConvertAvroToJson*
-> *EvaluateJsonPath* (to extract the fooID )
-> *HashContent*
-> *MergeContent*
-> *PutSFTP*
请为我提出建议。
答案 0 :(得分:2)
对于这种情况,我可以想到三种方法。
方法1 :使用MD5函数执行SQL查询以获取fooId的哈希值:
流量:
GenerateFlowFile //添加开始日期,结束日期属性
startdate -> ${now():format("yyyyMM"):minus(1):append("01")}
enddate -> ${now():format("yyyyMM"):append("01")}
ExecuteSQL //选择md5(fooId)foodId,从FooBar中删除,其中
query_date>=${startdate} and query_date<${enddate}
根据您的来源更改上述查询,以获取列的md5哈希值
ConvertRecord //将Avro格式转换为Json格式
方法2 :在NiFi中创建MD5哈希值
流量:
GenerateFlowFile //添加开始日期,结束日期属性
startdate -> ${now():format("yyyyMM"):minus(1):append("01")}
enddate -> ${now():format("yyyyMM"):append("01")}
ExecuteSQL //选择fooId,从FooBar中删除
其中query_date> = $ {startdate}和query_date
根据您的来源更改以上查询,以获取列的md5哈希值
ConvertRecord //将Avro格式转换为Json格式
另一种方法是编写脚本,该脚本可以解析json数组消息并为md5 hashvalue
键创建fooId
并使用新的md5哈希值写入json消息。
我上载了两种方法Approach1和Approach2模板,保存并上传到NiFi实例以获取更多参考,并使用最适合您情况的方法。