Ако използвате абонаментна версия на Talend, можете да използвате динамичния тип колона. Можете да дефинирате една колона за вашия вход от тип "Динамичен" и да я съпоставите с колона от същия тип във вашия изходен компонент. Това динамично ще получи колони от таблица a и ще ги съпостави със същите колони в таблица b. Ето един пример
.
Ако използвате Talend Open Studio, нещата стават малко по-трудни, тъй като Talend очаква списък с колони за входните и изходните компоненти, които трябва да бъдат дефинирани по време на проектиране.
Ето решение, което събрах, за да заобиколя това ограничение.
Идеята е да се изброят всички колони на таблица a, които присъстват в таблица b. След това го преобразувайте в разделен със запетая списък с колони, в моя пример id,Theme,name
и го съхранявайте в глобална променлива COLUMN_LIST
. Втори изход на tMap изгражда същия списък с колони, но този път поставя единични кавички между колоните (за да могат да се използват като параметри на CONCAT
функция по-късно), след което добавете единични кавички в началото и края, както следва:"'", id,"','",Theme,"','",name,"'"
и го съхранявайте в глобална променлива CONCAT_LIST
.
При следващото подзадание задавам заявка за table a
като използвате CONCAT
функция, давайки й списък с колони, които трябва да бъдат конкатенирани CONCAT_LIST
, като по този начин извлича всеки запис в една колона, например 'value1', 'value2',..etc
След това най-накрая изпълнявам INSERT
заявка към table b
, като посочите списъка с колони, даден от глобалната променлива COLUMN_LIST
и стойностите, които трябва да бъдат вмъкнати като единичен низ, резултат от CONCAT
функция (row6.values
).
Това решение е общо, ако замените имената на вашите таблици с контекстни променливи, можете да го използвате, за да копирате данни от всяка MySQL таблица в друга таблица.