根据来自hive的输入,在mysql中查询数据

时间:2014-08-01 08:33:57

标签: mysql hive talend

我需要查询Hive中的列,并根据我想在MySQL DB中查询它的输出。

流程如下所示:

  1. 查询Hive表,获取ID列表
  2. 使用ID列表查询MySQL表。查询类似于select a,b,c from x where id in (list from hive)
  3. 我该怎么做?

1 个答案:

答案 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上参数化查询的更多详细信息。