如何在Apache NiFi中从executeSQL动态传递值到SelectHiveQL

时间:2016-12-09 09:48:31

标签: hadoop hive minify apache-nifi hdf

我在mysql test.employee中有两个表,在hive中有两个表default.dept 我想传递test.employee表的empid作为参数在hive表中查询并将数据存储到HDFS中

ExecuteSQL - >从test.employee中选择empid(给出10条记录)

SelectHiveQL - > SELECT * FROM default.dept其中empid = $ {empid}(应检索10条记录)

image description here

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

  1. ExecuteSQL - 检索员工记录
  2. ConvertAvroToJson - 用于以后处理empid
  3. SplitJson - 每行拆分成一个流文件
  4. EvaluateJsonPath - 将empid的值获取到流文件属性
  5. ReplaceText - 将内容设置为HiveQL语句(使用上面的表达式语言)
  6. SelectHiveQL - 获取部门记录
  7. 请注意,这会为每个empid值执行Hive SELECT,因此每次执行SelectHiveQL都会生成一条记录。我不确定(例如,给出IN子句的HiveQL语义)如何获取单个HiveQL语句,因为它是“常量表”和Hive表之间的连接,更不用说NiFi处理更多了复杂,因为你不想要SplitJson,并且可能必须一次处理所有记录(例如,使用ExecuteScript)

答案 1 :(得分:0)

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}