我正在尝试从SFTP服务器加载包含225 GB(文件数量〜1,75,000)的巨大数据,并将数据复制到HDFS。 为了实现上述方案,我们使用了2个处理器。 GetSFTP(从SFTP服务器获取文件) 配置处理器->递归搜索= true; 使用自然排序= true; ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我想使用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服务器上。 同样,其他月份的其他文件也按照相同的过程进行查询,但间隔不同。
需要考虑的重要事项: 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*
请为我提出建议。
对于这种情况,我可以想到三种方法。
方法1 :使用MD5函数执行SQL查询以获取fooId的哈希值:
流:
GenerateFlowFile //添加开始日期,结束日期属性
startdate -> ${now():format("yyyyMM"):minus(1):append("01")} enddate -> ${now():format("yyyyMM"):append("01")}
ExecuteSQL //选择md5(fooId)foodId,从FooBar中输入bar
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数组消息并为fooId
键创建md5 hashvalue
,并使用新的md5哈希值编写json消息。
我上传这两种方法Approach1和Approach2模板,保存并上传到NiFi实例更多的参考和使用你的情况最适合的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.