sql >> Database >  >> RDS >> Mysql

Hoe het schema in Mysqlinput on the fly te raden in Talend

Als je een abonnementsversie van Talend gebruikt, kun je het dynamische kolomtype gebruiken. U kunt een enkele kolom definiëren voor uw invoer van het type "Dynamisch" en deze toewijzen aan een kolom van hetzelfde type in uw uitvoercomponent. Hiermee worden dynamisch kolommen uit tabel a opgehaald en toegewezen aan dezelfde kolommen in tabel b. Hier is een voorbeeld .
Als je Talend Open Studio gebruikt, wordt het een beetje lastiger omdat Talend een lijst met kolommen verwacht voor de invoer- en uitvoercomponenten die tijdens het ontwerp moeten worden gedefinieerd.

Hier is een oplossing die ik heb samengesteld om deze beperking te omzeilen.

Het idee is om alle kolommen van tabel a op te sommen die aanwezig zijn in tabel b. Converteer het vervolgens naar een door komma's gescheiden lijst met kolommen, in mijn voorbeeld id,Theme,name en sla het op in een globale variabele COLUMN_LIST . Een tweede uitvoer van de tMap bouwt dezelfde lijst met kolommen op, maar plaatst deze keer enkele aanhalingstekens tussen kolommen (zodat ze kunnen worden gebruikt als parameters voor de CONCAT functie later), voeg dan enkele aanhalingstekens toe aan het begin en einde, zoals:"'", id,"','",Theme,"','",name,"'" en sla het op in een globale variabele CONCAT_LIST .

Bij de volgende subjob vraag ik table a met behulp van de CONCAT functie, waardoor het de lijst met aaneengeschakelde kolommen krijgt CONCAT_LIST , waardoor elk record in een enkele kolom wordt opgehaald, zoals 'value1', 'value2',..etc

Dan voer ik eindelijk een INSERT . uit query tegen table b , door de lijst met kolommen op te geven die wordt gegeven door de globale variabele COLUMN_LIST , en de waarden die moeten worden ingevoegd als een enkele tekenreeks die resulteert uit de CONCAT functie (row6.values ).

Deze oplossing is generiek. Als u uw tabelnamen vervangt door contextvariabelen, kunt u deze gebruiken om gegevens van elke MySQL-tabel naar een andere tabel te kopiëren.




  1. Hoeveel zoekopdrachten zijn te veel?

  2. Het transactielogboek voor de database is vol

  3. Django kan MySQLdb python-module niet vinden

  4. Drop MySQL-databases die overeenkomen met een wildcard?