数据库
首页 > 数据库> > Talend可以为MySQL输出使用动态表名吗?

Talend可以为MySQL输出使用动态表名吗?

作者:互联网

(用于数据集成的Talend OS)

可以使用动态表名吗?我已经研究了用户手册中的所有资源,尽管它们似乎都没有明确排除它,但我似乎无法使其正常工作.

情境

假设您有一个由1,000,000个名字组成的庞大列表-Dave Smith,Dave Jones,Dave Bloggs等.这些都存储在一个表中.

您需要将它们拆分成反映名字的表,因此您将拥有一个具有表名(例如“ Andy”,“ Adrian”,“ Adam”等)的数据库.

我在哪里

我所能做的就是毫无问题地将一个完整的数据集批量导出到一个表中.我还可以使用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

解决方法:

除此之外,我设法使它起作用.

enter image description here

> tMysqlInput_1从information_schema中检索表名称
在子作业中创建的
>然后将这些传递到tHashOutput_1.
> tHashInput_1然后将它们提供给tFlowtoIterate组件,
    遍历我的输入工作.
>然后,我可以通过调用(String)globalMap.get(“ row6.TABLE_NAME”))来访问每个表名,因为我的tHash模式有一个名为“ Table_Name”的列.

我发生了一些动作,借此在过滤器中使用Table_Name仅提取与表名匹配的字段,然后将其传递给我的yMysqlOutput组件,如下所示:

enter image description here

我已经测试过了,一切都很好.希望这可以为某人节省很多时间,以解决将来的问题(或者与Talend相比比我好得多的人可以节省5分钟!).

谢谢!

标签:talend,mysql,etl
来源: https://codeday.me/bug/20191026/1938271.html