【问题标题】:How to Guess schema in Mysqlinput on the fly in Talend如何在 Talend 中动态猜测 Mysqlinput 中的模式
【发布时间】:2018-06-23 08:06:33
【问题描述】:

我已经构建了一个将数据从 mysql db 表复制到 b mysql 表的作业。 除了有时可以在表 a db 中添加新列之外,表列是相同的。

我想检索从 a 到 b 的所有列,但只检索表 b 中存在的那些。我能够放入表 b 中存在的查询特定的 select colume 语句,例如:

select coulmn1,column2,columns3... from table a

问题是如果我在 b 中添加一个与 Mysqlinput 中的 talend 作业模式匹配的新列,也应该更改,因为我使用的是内置类型。

有没有办法在作业运行期间强制使用架构列?

【问题讨论】:

    标签: mysql schema talend jobs


    【解决方案1】:

    如果您使用的是订阅版的 Talend,则可以使用动态列类型。您可以为“动态”类型的输入定义单个列,并将其映射到输出组件中相同类型的列。这将从表 a 中动态获取列并将它们映射到表 b 中的相同列。这是example
    如果您使用的是 Talend Open Studio,事情会变得有点棘手,因为 Talend 需要在设计时定义输入和输出组件的列列表。

    这是我为解决此限制而提出的解决方案。

    我们的想法是列出表 b 中存在的所有表 a 的列。然后将其转换为以逗号分隔的列列表,在我的示例中为id,Theme,name,并将其存储在全局变量COLUMN_LIST 中。 tMap 的第二个输出构建了相同的列列表,但这次在列之间放置了单引号(以便稍后可以将它们用作CONCAT 函数的参数),然后在开头和结尾添加单引号,例如所以:"'", id,"','",Theme,"','",name,"'" 并将其存储在全局变量 CONCAT_LIST 中。

    在下一个子作业中,我使用CONCAT 函数查询table a,并为其提供要连接的列列表CONCAT_LIST,从而在单个列中检索每条记录,就像'value1', 'value2',..etc 一样

    最后我对table b 执行INSERT 查询,方法是指定由全局变量COLUMN_LIST 给出的列列表,以及作为CONCAT 函数生成的单个字符串插入的值(row6.values)。

    此解决方案是通用的,如果您将表名替换为上下文变量,则可以使用它将数据从任何 MySQL 表复制到另一个表。

    【讨论】:

    • 我确实使用 Talend Open Studio :(
    • 你的表格经常改变结构吗?
    • 您的表 a 和 b 是否位于不同的数据库中?如果它们在同一个数据库上,我可以提出一个解决方案。
    • 他们是不同的
    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 2013-09-22
    • 1970-01-01
    • 2011-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多