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