如何在apachenifi中从executesql向selecthiveql动态传递值

5jdjgkvh  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(674)

我有两个表,一个在mysql test.employee中,另一个在hive default.dept中,我想传递test.employee表的empid作为参数在hive表中进行查询,并将数据存储到hdfs中
executesql->从test.employee中选择empid(给出10条记录)
selecthiveql->select*from default.dept where empid=${empid}(应检索10条记录)
此处显示图像描述

xtfmy6hx

xtfmy6hx1#

ExecuteSQL ->SplitAvro ->ConvertAvroToJson -> EvaluateJsonPath -> ReplaceText ->SelectHiveQL -> PutHDFS

ExecuteSQL       ==> Query -> select empid from employees
EvaluateHsonPath ==> destination ->flowfile-attribute
                 ==> empid = $.empid
ReplaceText      ==> ReplacementValue  -> ${empid}
SelectHiveQL   -> select * from dept where empid = ${empid}
6rqinv9w

6rqinv9w2#

您可以执行以下操作:
executesql-检索员工记录
convertavrotojson-用于empid的后期处理
splitjson-将每行拆分为一个流文件
evaluatejsonpath—将empid的值获取到流文件属性中
replacetext—将内容设置为hiveql语句(使用上面所做的表达式语言)
选择hiveql-获取部门记录
请注意,这将为每个empid值执行一个hive select,因此每次执行selecthiveql都将生成一条记录。我不确定(例如,给定in子句的hiveql语义)如何获得一个hiveql语句,因为它是“常数表”和hive表之间的连接,更不用说nifi处理更复杂,因为您不需要splitjson,可能必须一次处理所有记录(例如,使用executescript)

相关问题