So führen Sie mehrere SQL-Abfragen parallel aus, warten auf den Abschluss und rufen eine Liste der Datentabellen abHallo,
Ich hätte gerne eine Funktion, die (i) mehrere SQL-Abfragen im Hintergrund ausführt (Verbindungs- und SQL-Anweisungen aus Zeichenfolgenlisten mit beliebiger Länge), (ii) wartet, bis alle Abfragen abgeschlossen sind, und (iii) eine Liste von Datentabellen zurückgibt . Bitte finden Sie meinen Code unten. Ich weiß nicht, wie ich die Datentabellen richtig erfassen soll.
Vielen Dank im Voraus.
Run_SQL_Queries = Function({o_connections, o_sqls},
i_dts = List();
For(i_counter = 1, i_counter <= N Items(o_connections), i_counter++,
i_dt = Empty();
i_connection = o_connections[i_counter];
i_sql = o_sqls[i_counter];
query = Neue SQL-Abfrage(
Verbindung(i_connection),
Benutzerdefiniertes SQL (i_sql)
) << Run Background(OnRunComplete(i_dt = queryResult));
Einfügen in(i_dts, i_dt);
);
Return(i_dts);
);
Automatisierung und SkripterstellungDatenzugriffBetreff: So führen Sie mehrere SQL-Abfragen parallel aus, warten auf den Abschluss und rufen eine Liste der Datentabellen abIch bin mir nicht sicher, ob Sie eine solche Funktion in JMP erstellen können. Möglicherweise müssen Sie << OnRunComplete in Ihrem << Run Background verwenden und alles, was Sie gerade tun, damit ausführen, nachdem alle Abfragen bereit sind.
Betreff: So führen Sie mehrere SQL-Abfragen parallel aus, warten auf den Abschluss und rufen eine Liste der Datentabellen abLeider stellt JMP nur einen einzigen Ausführungsthread für JSL bereit.Für mein Unternehmen umgehe ich diese Einschränkung und mache genau das, was Sie tun möchten, indem ich eine dauerhafte Python-Sitzung verwende.Ich starte die Python-Sitzung über JMP, das über einen Hook verfügt, wenn der STDOUT-Puffer nicht leer ist, und in Python starte ich einen Localhost-Server und warte auf Befehle.Dann kann ich mich in JMP mit dem Localhost-Server verbinden und Nachrichten senden.Python führt dann parallel die zugewiesenen Aufgaben aus (sei es SQL, Dateiübertragungen oder alles andere, was benötigt wird) und verfügt über spezielle Druckanweisungen für den Abschluss, wodurch die Schleife geschlossen wird und JMP weiß, wann die Abfragen abgeschlossen sind.
Für SQL lasse ich Python die Ergebnisse in einer temporären Datei speichern, dann kann JMP die Datei einfach lesen.
Es ist ein wenig umständlich, aber nicht allzu viel schwieriger, als wenn JMP ein Mittel zur Parallelität oder asynchronen Ausführung bereitstellen würde.
Das funktioniert ganz gut und die Verlangsamung durch IPC ist nicht spürbar.
Betreff: So führen Sie mehrere SQL-Abfragen parallel aus, warten auf den Abschluss und rufen eine Liste der Datentabellen abIch mache seit einiger Zeit etwas Ähnliches.Ich führe mehrere Abfragen gleichzeitig aus und führe dann Operationen an den Tabellen durch.Ich habe meine Lösung für Ihre Anwendung angepasst.Es ist nicht schön, aber ich habe viele, viele andere Möglichkeiten in JMP ausprobiert, aber nichts anderes hat das erreicht, was ich wollte.
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 );