複数の SQL クエリを並行して実行し、完了を待ち、データテーブルのリストを取得する方法こんにちは、
(i) バックグラウンドで複数の SQL クエリ (任意の長さの文字列リストからの接続および SQL ステートメント) を実行し、(ii) すべてのクエリが完了するまで待機し、(iii) データテーブルのリストを返す関数が欲しいと考えています。 。 以下で私のコードを見つけてください。 データテーブルを正しく収集する方法がわかりません。
よろしくお願いします。
Run_SQL_Queries = Function({o_connections, o_sqls},
i_dts = リスト();
For(i_counter = 1, i_counter <= N Items(o_connections), i_counter++,
i_dt = 空();
i_connection = o_connections[i_counter];
i_sql = o_sqls[i_counter];
クエリ = 新しい SQL クエリ(
接続(i_connection)、
カスタムSQL(i_sql)
) << Run Background(OnRunComplete(i_dt = queryResult));
挿入(i_dts, i_dt);
);
リターン(i_dts);
);
自動化とスクリプト作成データアクセスRe: 複数の SQL クエリを並行して実行し、完了を待ち、データテーブルのリストを取得する方法JMP でそのような関数を構築できるかどうかはわかりません。 << Run Background 内で << OnRunComplete を使用し、すべてのクエリの準備ができたら、それを使用して何を実行する必要がある場合があります。
Re: 複数の SQL クエリを並行して実行し、完了を待ち、データテーブルのリストを取得する方法残念ながら、JMP は JSL に対して単一の実行スレッドしか提供しません。私の会社では、永続的な Python セッションを使用してこの制限を回避し、やりたいことを正確に実行します。JMP から Python セッションを起動します。JMP には STDOUT バッファが空でない場合のフックがあり、Python で localhost サーバーを起動してコマンドを待ちます。その後、JMP で localhost サーバーに接続してメッセージを送信できます。次に、Python は、割り当てられたタスク (SQL、ファイル転送、その他必要なもの) を並行して完了し、完了時に特別な print ステートメントを用意します。これにより、ループが閉じられ、JMP がクエリがいつ完了したかを知ることができるようになります。
SQL の場合、Python で結果を一時ファイルに保存し、JMP でそのファイルを読み取ることができます。
これは少し回りくどいですが、JMP が同時実行または非同期実行の手段を提供する場合よりもそれほど難しくはありません。
これは非常にうまく機能し、IPC による速度の低下は目立ちません。
Re: 複数の SQL クエリを並行して実行し、完了を待ち、データテーブルのリストを取得する方法私もしばらく同じようなことをやっています。複数のクエリを同時に実行し、テーブルに対して操作を実行します。私のソリューションをあなたのアプリケーションに合わせて調整しました。あまりきれいではありませんが、JMP で他にもたくさんの方法を試しましたが、他に私が望んでいたものを実現するものはありませんでした。
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 );