(数据集成的Talend OS)
是否可以使用动态表名?我已经研究过用户手册中的所有资源,虽然它们似乎都没有明确规定它,但我似乎无法让它发挥作用。
方案
假设你有1,000,000个名字的巨大名单 - 戴夫史密斯,戴夫琼斯,戴夫博格斯等等。这些都存储在一个表格中。
您需要将这些分成反映名字的表格,因此您将拥有一个包含表格名称的数据库,例如' Andy',' Adrian',' Adam& #39;等
我在
的位置我可以做的,没有问题,是将完整数据集批量导出到表格中。我也可以使用tMysqlRow
遍历该字段来创建我的单个表(这本身就更快)。
然后我尝试选择并将数据吐出到各自的字段中,但遇到了这些问题:
建议查看ETL组件,但是它们的定义清楚地表明表名必须用引号定义。
Talend提供如此多的上下文变量似乎真的很奇怪,但似乎不允许你动态地将一个数据集拆分成多个表。这是产品限制,还是只是我?
提前致谢。
编辑 - 添加了截图
上下文是在此屏幕截图中打印到窗口(' AB'是使用的测试上下文值),以显示该值是相关的,直到它在表格中声明为止。字段,但然后返回空值
答案 0 :(得分:3)
为了补充一点,我已经设法让它发挥作用。
information_schema
检索表名称
在subjob中创建的然后传递给 tHashOutput_1 。
tHashInput_1 然后将这些内容提供给tFlowtoIterate
组件,
它遍历我的输入工作。
然后我可以通过调用(String)globalMap.get("row6.TABLE_NAME"))
来访问每个表名,因为我的tHash模式有一列我名为'Table_Name'。
我做了一些操作,我在过滤器中使用Table_Name
只提取与表名匹配的字段,然后将其传递给我的yMysqlOutput组件,如下所示:
我已经测试过了,这一切都很好。希望这可能会让很多人在将来挽救这个问题(或者对于Talend比我更好的人来说还有5分钟的时间!)。
谢谢!
答案 1 :(得分:1)
克里斯,
如果你可以将tELTMysqlMap与tELTMysqlOutput组件结合使用,你应该能够实现这一点。
tELTMysqlOutput有一个"使用不同的表名"复选框,您可以在其中指定表名作为上下文变量或来自ELTMysqlMap的输入字段。
注意: - 我还没有尝试过。