여러 SQL 쿼리를 병렬로 실행하고, 완료를 기다리고, 데이터 테이블 목록을 가져오는 방법안녕,
(i) 백그라운드에서 여러 SQL 쿼리를 실행하고(임의 길이의 문자열 목록에서 연결 및 SQL 문), (ii) 모든 쿼리가 완료될 때까지 기다리고, (iii) 데이터 테이블 목록을 반환하는 함수를 갖고 싶습니다. . 아래에서 내 코드를 찾으십시오. 데이터 테이블을 올바르게 수집하는 방법을 모르겠습니다.
미리 감사드립니다.
Run_SQL_Queries = 함수({o_connections, o_sqls},
i_dts = 목록();
For(i_counter = 1, i_counter <= N 항목(o_connections), i_counter++,
i_dt = 비어있음();
i_connection = o_connections[i_counter];
i_sql = o_sqls[i_counter];
쿼리 = 새 SQL 쿼리(
연결(i_connection),
사용자 정의 SQL(i_sql)
) << 배경 실행(OnRunComplete(i_dt = queryResult));
삽입 대상(i_dts, i_dt);
);
반환(i_dts);
);
자동화 및 스크립팅데이터 접근Re: 여러 SQL 쿼리를 병렬로 실행하고, 완료를 기다리고, 데이터 테이블 목록을 가져오는 방법JMP에서 그러한 기능을 구축할 수 있는지 잘 모르겠습니다. << 실행 배경 내에서 << OnRunComplete를 사용하고 모든 쿼리가 준비된 후 이를 사용하여 수행 중인 작업을 수행해야 할 수도 있습니다.
Re: 여러 SQL 쿼리를 병렬로 실행하고, 완료를 기다리고, 데이터 테이블 목록을 가져오는 방법불행하게도 JMP는 JSL에 대해 단일 실행 스레드만 제공합니다.우리 회사에서는 영구 Python 세션을 사용하여 이러한 제한을 극복하고 원하는 작업을 정확하게 수행합니다.STDOUT 버퍼가 비어 있지 않을 때를 위한 후크가 있는 JMP에서 Python 세션을 시작하고 Python에서 localhost 서버를 시작하고 명령을 기다립니다.그런 다음 JMP에서 localhost 서버에 연결하고 메시지를 보낼 수 있습니다.그런 다음 Python은 할당된 작업(SQL, 파일 전송 또는 필요한 모든 것)을 병렬로 완료하고 완료 시 특별한 인쇄 문을 사용하여 루프를 닫고 쿼리가 완료되는 시기를 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 );