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

流程如下:

  1. 查询Hive表,获取ID列表
  2. 使用 ID 列表来查询 MySQL 表。查询就像 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 中的参数化查询,作为另一个问题解决方案的一部分(高效更新插入)。正如该答案中提到的,有关参数化查询的更多详细信息 加布里埃莱·巴尔达萨尔的博客.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top