sql >> Base de Datos >  >> RDS >> Mysql

Cómo adivinar el esquema en Mysqlinput sobre la marcha en Talend

Si utiliza una versión de suscripción de Talend, puede utilizar el tipo de columna dinámica. Puede definir una sola columna para su entrada de tipo "Dinámico" y asignarla a una columna del mismo tipo en su componente de salida. Esto obtendrá dinámicamente columnas de la tabla a y las asignará a las mismas columnas en la tabla b. He aquí un ejemplo .
Si utiliza Talend Open Studio, las cosas se complican un poco, ya que Talend espera una lista de columnas para los componentes de entrada y salida que deben definirse en el momento del diseño.

Aquí hay una solución que preparé para solucionar esta limitación.

La idea es enumerar todas las columnas de la tabla a que están presentes en la tabla b. Luego conviértalo en una lista de columnas separadas por comas, en mi ejemplo id,Theme,name y almacenarlo en una variable global COLUMN_LIST . Una segunda salida del tMap construye la misma lista de columnas, pero esta vez colocando comillas simples entre columnas (para que puedan usarse como parámetros para el CONCAT función más adelante), luego agregue comillas simples al principio y al final, así:"'", id,"','",Theme,"','",name,"'" y almacenarlo en una variable global CONCAT_LIST .

En el siguiente subtrabajo, consulto table a usando el CONCAT función, dándole la lista de columnas a concatenar CONCAT_LIST , recuperando así cada registro en una sola columna como 'value1', 'value2',..etc

Entonces por fin ejecuto un INSERT consulta contra table b , especificando la lista de columnas dada por la variable global COLUMN_LIST , y los valores que se insertarán como una sola cadena resultante de CONCAT función (row6.values ).

Esta solución es genérica, si reemplaza los nombres de sus tablas por variables de contexto, puede usarla para copiar datos de cualquier tabla MySQL a otra tabla.