我需要在Hive中查询列,并根据MySQL DB中的输出查询它。
流程如下所示:
select a,b,c from x where id in (list from hive)我该怎么做?
发布于 2014-08-01 08:48:45
您只需要使用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组件使用参数化查询(目前tMySqlInput组件中不支持Talend5.4)。
这个答案详细介绍了Talend中的参数化查询,作为另一个问题的解决方案的一部分(高效地向上插入)。正如在这个答案中提到的,关于加布里埃尔·巴尔达萨雷的博客上的参数化查询还有更多的细节。
https://stackoverflow.com/questions/25076046
复制相似问题