Cómo ejecutar múltiples consultas SQL en paralelo, esperar a que finalice y obtener una lista de tablas de datosHola,
Me gustaría tener una función que (i) ejecute múltiples consultas SQL en segundo plano (declaraciones SQL y de conexión de listas de cadenas con longitudes arbitrarias), (ii) espere hasta que finalicen todas las consultas y (iii) devuelva una lista de tablas de datos. . Encuentre mi código a continuación. No sé cómo recopilar las tablas de datos correctamente.
Gracias de antemano.
Run_SQL_Queries = Función({o_connections, o_sqls},
i_dts = Lista();
Para (i_counter = 1, i_counter <= N elementos (o_conexiones), i_counter++,
i_dt = Vacío();
i_conexión = o_conexiones[i_counter];
i_sql = o_sqls[i_counter];
consulta = Nueva consulta SQL (
Conexión(i_conexión),
SQL personalizado (i_sql)
) << Ejecutar en segundo plano(OnRunComplete(i_dt = queryResult));
Insertar en (i_dts, i_dt);
);
Retorno(i_dts);
);
Automatización y secuencias de comandosAcceso a los datosRe: Cómo ejecutar múltiples consultas SQL en paralelo, esperar a que finalice y obtener una lista de tablas de datosNo estoy seguro de poder crear una función de este tipo en JMP. Es posible que tengas que usar << OnRunComplete dentro de tu << Ejecutar fondo y realizar lo que estés haciendo, después de que todas las consultas estén listas, usándolo.
Re: Cómo ejecutar múltiples consultas SQL en paralelo, esperar a que finalice y obtener una lista de tablas de datosDesafortunadamente, JMP solo proporciona un único hilo de ejecución para JSL.Para mi empresa, soluciono esta limitación y hago exactamente lo que usted quiere hacer mediante el uso de una sesión persistente de Python.Lanzo la sesión de Python desde JMP, que tiene un gancho para cuando el buffer STDOUT no está vacío, y en Python inicio un servidor localhost y espero comandos.Luego, en JMP puedo conectarme al servidor localhost y enviar mensajes.Luego, Python, en paralelo, completará las tareas asignadas (ya sea SQL o transferencias de archivos o cualquier cosa necesaria) y tendrá declaraciones de impresión especiales para cuando se completen, cerrando así el ciclo y permitiendo que JMP sepa cuándo se completaron las consultas.
Para SQL, hago que Python guarde los resultados en un archivo temporal y luego JMP puede simplemente leer el archivo.
Es un poco indirecto, pero no mucho más difícil que si JMP proporcionara un medio para la ejecución concurrente o asincrónica.
Esto funciona bastante bien y la desaceleración debida al IPC no se nota.
Re: Cómo ejecutar múltiples consultas SQL en paralelo, esperar a que finalice y obtener una lista de tablas de datosLlevo un tiempo haciendo algo parecido.Ejecuto varias consultas simultáneamente y luego realizo operaciones en las tablas.He adaptado mi solución para su aplicación.No es bonito, pero he probado muchas, muchas otras formas en JMP y ninguna más ha logrado lo que quería.
Names Default To Here( 1 );
o_connections = {....Connection List....};
o_sqls = {....Query List....};
::i_dts = {};
Run_SQL_Queries = Function( {o_connection, o_sql, i_counter},
{Default Local},
Eval(
Eval Expr(
Expr(
Parse( "::i_dt" || Char( i_counter ) || " = Empty()" )
);
New SQL Query( Connection( o_connection ), Custom SQL( o_sql ) ) << Run Background(
OnRunComplete(
Expr(
Parse( "::i_dt" || Char( i_counter ) || " = QueryResult;" )
);
Insert Into( ::i_dts, QueryResult )
;
)
);
)
)
);
For( i=1, i<=N Items(o_connections), i++, Run_SQL_Queries( o_connections[i], o_sqls[i], i ) );
For( i = 1, i <= N Items( o_connections ), i++,
Eval( Parse( "While(!Is Scriptable(::i_dt" || Char( i ) || "), Wait(.5))" ) )
);
Show( ::i_dt1, ::i_dt2, ::i_dts );