Come eseguire più query SQL in parallelo, attendere la fine e ottenere l'elenco delle tabelle datiCIAO,
Mi piacerebbe avere una funzione che (i) esegua più query SQL in background (connessioni e istruzioni SQL da elenchi di stringhe con lunghezze arbitrarie), (ii) attenda il completamento di tutte le query e (iii) restituisca un elenco di datatable . Si prega di trovare il mio codice qui sotto. Non so come raccogliere correttamente le tabelle dei dati.
Grazie in anticipo.
Esegui_SQL_Queries = Funzione({o_connections, o_sqls},
i_dts = Lista();
For(i_counter = 1, i_counter <= N elementi(o_connections), i_counter++,
i_dt = Vuoto();
i_connessione = o_connessioni[i_contatore];
i_sql = o_sqls[i_contatore];
query = Nuova query SQL(
Connessione(i_connessione),
SQL personalizzato(i_sql)
) << Esegui Background(OnRunComplete(i_dt = queryResult));
Inserisci in(i_dts, i_dt);
);
Ritorno(i_dts);
);
Automazione e scriptingAccesso ai datiRi: Come eseguire più query SQL in parallelo, attendere la fine e ottenere l'elenco delle tabelle datiNon sono sicuro che sia possibile creare una funzione del genere in JMP. Potrebbe essere necessario utilizzare << OnRunComplete all'interno del tuo << Esegui Background ed eseguire qualunque cosa tu stia facendo, dopo che tutte le query sono pronte, utilizzandolo.
Ri: Come eseguire più query SQL in parallelo, attendere la fine e ottenere l'elenco delle tabelle datiSfortunatamente JMP fornisce solo un singolo thread di esecuzione per JSL.Per la mia azienda aggiro questa limitazione e faccio esattamente quello che vuoi fare utilizzando una sessione Python persistente.Lancio la sessione Python da JMP, che ha un hook per quando il buffer STDOUT non è vuoto, e in Python avvio un server localhost e aspetto i comandi.Quindi in JMP posso connettermi al server localhost e inviare messaggi.Python quindi, in parallelo, completerà le attività assegnate (che si tratti di SQL o trasferimenti di file o qualsiasi altra cosa necessaria) e avrà speciali istruzioni print per una volta completate, chiudendo così il ciclo e consentendo a JMP di sapere quando le query sono completate.
Per SQL faccio in modo che Python salvi i risultati in un file temporaneo, quindi JMP può semplicemente leggere il file.
È un po' complicato, ma non molto più difficile che se JMP fornisse un mezzo per la concorrenza o l'esecuzione asincrona.
Funziona abbastanza bene e il rallentamento dovuto all'IPC non è evidente.
Ri: Come eseguire più query SQL in parallelo, attendere la fine e ottenere l'elenco delle tabelle datiFaccio qualcosa di simile da un po'.Eseguo più query contemporaneamente e quindi eseguo operazioni sulle tabelle.Ho adattato la mia soluzione per la tua applicazione.Non è carino, ma ho provato moltissimi altri modi in JMP e nient'altro ha ottenuto ciò che volevo.
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 );