如何在 Talend 中动态猜测 Mysqlinput 中的模式
How to Guess schema in Mysqlinput on the fly in Talend
我构建了一个作业,将数据从 mysql db table 复制到 b mysql table。
table 列是相同的,除了有时可以在 table 数据库中添加新列。
我想检索从 a 到 b 的所有列,但只检索存在于 table b 中的列。我能够输入 table b 中存在的查询特定 select colume 语句,例如:
select coulmn1,column2,columns3... from table a
问题是,如果我在 b 中添加一个与 Mysqlinput 中的 talend 作业模式匹配的新列,那么也应该更改,因为我使用的是内置类型。
有没有办法在作业期间强制使用架构列运行?
如果您使用的是订阅版 Talend,则可以使用动态列类型。您可以为 "Dynamic" 类型的输入定义单个列,并将其映射到输出组件中相同类型的列。这将从 table a 动态获取列并将它们映射到 table b 中的相同列。这是一个 example.
如果您使用的是 Talend Open Studio,事情会变得有点棘手,因为 Talend 需要一个需要在设计时定义的输入和输出组件的列列表。
这是我为解决此限制而整理的解决方案。
我们的想法是列出 table a 中存在于 table b 中的所有列。然后将其转换为逗号分隔的列列表,在我的示例中 id,Theme,name
并将其存储在全局变量 COLUMN_LIST
中。 tMap 的第二个输出构建相同的列列表,但这次在列之间放置单引号(以便稍后可以将它们用作 CONCAT
函数的参数),然后在开头和结尾添加单引号,像这样: "'", id,"','",Theme,"','",name,"'"
并将其存储在全局变量 CONCAT_LIST
.
中
在下一个子作业中,我使用 CONCAT
函数查询 table a
,为其提供要连接的列列表 CONCAT_LIST
,从而在单个列中检索每条记录,例如所以 'value1', 'value2',..etc
最后,我通过指定全局变量 COLUMN_LIST
给出的列列表以及要作为单个值插入的值,对 table b
执行 INSERT
查询CONCAT
函数 (row6.values
).
产生的字符串
此解决方案是通用的,如果您将 table 名称替换为上下文变量,则可以使用它来将数据从任何 MySQL table 复制到另一个 table .
我构建了一个作业,将数据从 mysql db table 复制到 b mysql table。 table 列是相同的,除了有时可以在 table 数据库中添加新列。
我想检索从 a 到 b 的所有列,但只检索存在于 table b 中的列。我能够输入 table b 中存在的查询特定 select colume 语句,例如:
select coulmn1,column2,columns3... from table a
问题是,如果我在 b 中添加一个与 Mysqlinput 中的 talend 作业模式匹配的新列,那么也应该更改,因为我使用的是内置类型。
有没有办法在作业期间强制使用架构列运行?
如果您使用的是订阅版 Talend,则可以使用动态列类型。您可以为 "Dynamic" 类型的输入定义单个列,并将其映射到输出组件中相同类型的列。这将从 table a 动态获取列并将它们映射到 table b 中的相同列。这是一个 example.
如果您使用的是 Talend Open Studio,事情会变得有点棘手,因为 Talend 需要一个需要在设计时定义的输入和输出组件的列列表。
这是我为解决此限制而整理的解决方案。
我们的想法是列出 table a 中存在于 table b 中的所有列。然后将其转换为逗号分隔的列列表,在我的示例中 id,Theme,name
并将其存储在全局变量 COLUMN_LIST
中。 tMap 的第二个输出构建相同的列列表,但这次在列之间放置单引号(以便稍后可以将它们用作 CONCAT
函数的参数),然后在开头和结尾添加单引号,像这样: "'", id,"','",Theme,"','",name,"'"
并将其存储在全局变量 CONCAT_LIST
.
在下一个子作业中,我使用 CONCAT
函数查询 table a
,为其提供要连接的列列表 CONCAT_LIST
,从而在单个列中检索每条记录,例如所以 'value1', 'value2',..etc
最后,我通过指定全局变量 COLUMN_LIST
给出的列列表以及要作为单个值插入的值,对 table b
执行 INSERT
查询CONCAT
函数 (row6.values
).
此解决方案是通用的,如果您将 table 名称替换为上下文变量,则可以使用它来将数据从任何 MySQL table 复制到另一个 table .