我需要在Hive中查询一列,并基于输出要在MySQL DB中查询它。
流程如下所示:
select a,b,c from x where id in (list from hive)
我该怎么做呢?
您只需要使用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组件当前不支持)的参数化查询。
该答案更详细地介绍了Talend中的参数化查询,这是对另一个问题(有效地提升)的解决方案的一部分。如该答案所述,Gabriele Baldassarre的博客上有关于参数化查询的更多详细信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句