Talend能否为MySQL输出使用动态表名?

时间:2016-09-21 13:06:51

标签: mysql etl talend

(数据集成的Talend OS)

是否可以使用动态表名?我已经研究过用户手册中的所有资源,虽然它们似乎都没有明确规定它,但我似乎无法让它发挥作用。

方案

假设你有1,000,000个名字的巨大名单 - 戴夫史密斯,戴夫琼斯,戴夫博格斯等等。这些都存储在一个表格中。

您需要将这些分成反映名字的表格,因此您将拥有一个包含表格名称的数据库,例如' Andy',' Adrian',' Adam& #39;等

我在

的位置

我可以做的,没有问题,是将完整数据集批量导出到表格中。我也可以使用tMysqlRow遍历该字段来创建我的单个表(这本身就更快)。

然后我尝试选择并将数据吐出到各自的字段中,但遇到了这些问题:

  • tMySqlRow可以与变量一起使用,因此我可以将数据插入到相关的表中,但它太慢而且冗余。它的运行速度大约为2000行/秒,还有大约2000万行。
  • tMySqlOutput要快得多,而且可以做得很好,但需要明确定义表名。使用上下文变量作为表名不起作用(读作' Null')。

建议查看ETL组件,但是它们的定义清楚地表明表名必须用引号定义。

Talend提供如此多的上下文变量似乎真的很奇怪,但似乎不允许你动态地将一个数据集拆分成多个表。这是产品限制,还是只是我?

提前致谢。

编辑 - 添加了截图

context variable available in selection 上下文是在此屏幕截图中打印到窗口(' AB'是使用的测试上下文值),以显示该值是相关的,直到它在表格中声明为止。字段,但然后返回空值

context variable prints to console okay, but is ignored as the table value

2 个答案:

答案 0 :(得分:3)

为了补充一点,我已经设法让它发挥作用。

enter image description here

  1. tMysqlInput_1 information_schema检索表名称 在subjob中创建的
  2. 然后传递给 tHashOutput_1

  3. tHashInput_1 然后将这些内容提供给tFlowtoIterate组件,     它遍历我的输入工作。

  4. 然后我可以通过调用(String)globalMap.get("row6.TABLE_NAME"))来访问每个表名,因为我的tHash模式有一列我名为'Table_Name'。

  5. 我做了一些操作,我在过滤器中使用Table_Name只提取与表名匹配的字段,然后将其传递给我的yMysqlOutput组件,如下所示:

    enter image description here

    我已经测试过了,这一切都很好。希望这可能会让很多人在将来挽救这个问题(或者对于Talend比我更好的人来说还有5分钟的时间!)。

    谢谢!

答案 1 :(得分:1)

克里斯,

如果你可以将tELTMysqlMap与tELTMysqlOutput组件结合使用,你应该能够实现这一点。

tELTMysqlOutput有一个"使用不同的表名"复选框,您可以在其中指定表名作为上下文变量或来自ELTMysqlMap的输入字段。

注意: - 我还没有尝试过。