Talend consulta datos en MySQL según las entradas de Hive
Pregunta
Tengo el requisito de consultar una columna en Hive y, según el resultado, quiero consultarla en MySQL DB.
El flujo es algo como a continuación:
- Consulta la tabla de Hive y obtén la lista de ID
- Utilice la lista de ID para consultar la tabla MySQL.La consulta sería como
select a,b,c from x where id in (list from hive)
¿Cómo hago esto?
Solución
Solo necesita realizar su consulta utilizando un componente tHiveInput para recuperar los ID y luego tendrá dos opciones, la forma fácil o la forma difícil (y mejor):
De manera sencilla, puede ejecutar desde el componente tHiveInput a tFlowToIterate y luego iterar hasta un componente tMySqlInput.Su consulta en el componente tMySqlInput se vería así:
"SELECT a, b, c
FROM x
WHERE id = '" + ((Integer)globalMap.get("row1.id")) + "'"
La fila1 aquí representa la fila que se ejecuta en su tFlowToIterate.También puede obtener esta variable presionando Ctrl+espacio y seleccionando el tFlowToIterate_x.id
opción.
Luego, podría conectar un componente tBufferOutput a su componente tMySqlInput para recopilar todas las iteraciones y luego volver a leerlo con un componente tBufferInput para su posterior procesamiento.
Obviamente, se trata de una concatenación simple que no es la mejor manera de lograr eficiencia y, por supuesto, está abierta a la inyección SQL.Pero es una manera tosca y fácil.
Su otra opción (más difícil pero potencialmente mejor) es utilizar una consulta parametrizada utilizando un componente tMySqlRow (actualmente no compatible con el componente tMySqlInput a partir de Talend 5.4).
esta respuesta entra en detalles sobre las consultas parametrizadas en Talend como parte de una solución a otro problema (inserción eficiente).Como se menciona en esa respuesta, hay más detalles sobre consultas parametrizadas en El blog de Gabriele Baldassarre.