How to Guess schema in Mysqlinput on the fly in Talend

前端 未结 1 2039
心在旅途
心在旅途 2021-01-25 22:49

I\'ve build a job that copy data from a mysql db table to b mysql table. The table columns are the same except sometimes a new column can be added in table a db.

i want

1条回答
  •  孤街浪徒
    2021-01-25 23:04

    If you are using a subscription version of Talend, you can use the dynamic column type. You can define a single column for your input of type "Dynamic" and map it to a column of the same type in your output component. This will dynamically get columns from table a and map them to the same columns in table b. Here's an example.
    If you are using Talend Open Studio, things get a little trickier as Talend expects a list of columns for the input and output components that need to be defined at design time.

    Here's a solution I put together to work around this limitation.

    The idea is to list all table a's columns that are present in table b. Then convert it to a comma separated list of columns, in my example id,Theme,name and store it in a global variable COLUMN_LIST. A second output of the tMap builds the same list of columns, but this time putting single quotes between columns (so as they can be used as parameters to the CONCAT function later), then add single quotes to the beginning and end, like so: "'", id,"','",Theme,"','",name,"'" and store it in a global variable CONCAT_LIST.

    On the next subjob, I query table a using the CONCAT function, giving it the list of columns to be concatenated CONCAT_LIST, thus retrieving each record in a single column like so 'value1', 'value2',..etc

    Then at last I execute an INSERT query against table b, by specifying the list of columns given by the global variable COLUMN_LIST, and the values to be inserted as a single string resulting from the CONCAT function (row6.values).

    This solution is generic, if you replace your table names by context variables, you can use it to copy data from any MySQL table to another table.

    0 讨论(0)
提交回复
热议问题