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

Can Talend use a dynamic table name for MySQL output?

(Talend OS 用于数据集成)

是否可以使用动态 table 名称?我已经研究了用户手册中的所有资源,虽然其中 none 似乎明确排除了它,但我似乎无法让它工作。

场景

假设您有一个包含 1,000,000 个名字的庞大列表 - Dave Smith、Dave Jones、Dave Bloggs 等。这些都存储在一个 table。

您需要将它们拆分为反映名字的 tables,因此您将拥有一个具有 tables 名称的 DB,例如 'Andy'、'Adrian' , 'Adam' 等

我在哪里

我能毫无问题地做的是将完整数据集批量导出到 table。我还可以遍历该字段以使用 tMysqlRow 创建我的个人 table(这本身要快得多)。

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

建议查看 ETL 组件,但它们的定义明确表明 table 名称必须用引号引起来。

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

提前致谢。

编辑 - 添加了屏幕截图

上下文打印到此屏幕截图中的 window('AB' 是使用的测试上下文值)以表明该值在 'Table' 字段中声明之前一直是相关的,但随后returns 空值

克里斯,

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

tELTMysqlOutput 有一个 "Use different table name" 复选框,您可以在其中将 Table 名称指定为上下文变量或来自 ELTMysqlMap 的输入字段。

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

补充一下,我已经设法让它工作了。

  1. tMysqlInput_1information_schema 检索 table 个名字 在子作业中创建的
  2. 然后将这些传递给 tHashOutput_1

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

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

我执行了一些操作,借此我在过滤器中使用 Table_Name 来仅提取与 table 名称匹配的字段,然后将其传递给我的 yMysqlOutput 组件,它看起来像这样:

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

谢谢!