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:

  1. Consulta la tabla de Hive y obtén la lista de ID
  2. 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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top