如何并行运行多个 SQL 查询、等待完成并获取数据表列表你好,
我想要一个函数,(i) 在后台运行多个 SQL 查询(来自任意长度的字符串列表的连接和 SQL 语句),(ii) 等待所有查询完成,(iii) 返回数据表列表。 请在下面找到我的代码。 我不知道如何正确收集数据表。
先感谢您。
Run_SQL_Queries = 函数({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)
) << 运行后台(OnRunComplete(i_dt = queryResult));
插入(i_dts, i_dt);
);
返回(i_dts);
);
自动化和脚本编写数据存取回复:如何并行运行多个 SQL 查询、等待完成并获取数据表列表我不确定你是否可以在 JMP 中构建这样的函数。 您可能必须在 << Run Background 中使用 << OnRunComplete 并在所有查询准备就绪后使用它执行您正在执行的任何操作。
回复:如何并行运行多个 SQL 查询、等待完成并获取数据表列表不幸的是,JMP 仅为 JSL 提供单个执行线程。对于我的公司,我绕过了这个限制,并通过使用持久的 Python 会话来完成您想要做的事情。我从 JMP 启动 Python 会话,该会话有一个当 STDOUT 缓冲区不为空时的钩子,在 Python 中,我启动本地主机服务器并等待命令。然后在 JMP 中我可以连接到本地主机服务器并发送消息。然后,Python 将并行完成指定的任务(无论是 SQL、文件传输还是任何需要的任务),并在完成时提供特殊的打印语句,从而关闭循环并允许 JMP 知道查询何时完成。
对于 SQL,我让 Python 将结果保存在临时文件中,然后 JMP 可以简单地读取该文件。
这有点迂回,但并不比 JMP 提供并发或异步执行的方法困难太多。
这工作得很好,并且 IPC 造成的速度减慢并不明显。
回复:如何并行运行多个 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 );