我需要查询Hive中的列,并根据我想在MySQL DB中查询它的输出。
流程如下所示:
select a,b,c from x where id in (list from hive)
我该怎么做?
答案 0 :(得分:2)
您只需要使用tHiveInput组件进行查询以检索ID,然后您就可以选择两种方式:简单方法或硬(以及更好)方式:
以简单的方式,您可以从tHiveInput组件运行到tFlowToIterate,然后迭代到tMySqlInput组件。您在tMySqlInput组件中的查询将类似于:
"SELECT a, b, c
FROM x
WHERE id = '" + ((Integer)globalMap.get("row1.id")) + "'"
row1此处表示运行到tFlowToIterate的行。您也可以通过按ctrl + space并选择tFlowToIterate_x.id
选项来获取此变量。
然后,您可以将tBufferOutput组件连接到tMySqlInput组件以收集所有迭代,然后使用tBufferInput组件将其读回以进行进一步处理。
这显然是一个简单的连接,然后不是效率的最佳方式,当然可以开放SQL注入。但这是一个粗略而准备好的方式。
您的其他(更难但可能更好)选项是使用tMySqlRow组件使用参数化查询(从Talend 5.4开始,tMySqlInput组件当前不支持)。
This answer详细介绍了Talend中参数化查询的一些细节,作为另一个问题解决方案的一部分(高效地进行上传)。正如该答案中所述,有关Gabriele Baldassarre's blog上参数化查询的更多详细信息。