Parallel processing Stata中odbc的并行加载

Parallel processing Stata中odbc的并行加载,parallel-processing,odbc,stata,Parallel Processing,Odbc,Stata,我正在尝试使用来自SSC的parallel命令,通过Stata中的ODBC连接并行加载数据 下面是一个玩具示例文件myloop.do,它在两个ID上循环: #delimit; foreach id in 77860668 1124831359 {; odbc load, exec(`" SELECT user_slctd_id ,user_id FROM dw_table WHERE user_id =`id' "

我正在尝试使用来自SSC的parallel命令,通过Stata中的ODBC连接并行加载数据

下面是一个玩具示例文件myloop.do,它在两个ID上循环:

#delimit;

foreach id in 77860668 1124831359 {;
    odbc load, exec(`"
    SELECT
        user_slctd_id
        ,user_id
        FROM dw_table
    WHERE user_id =`id'
    "') dsn("my_dsn") lowercase sqlshow clear;

    save "id_`id'.dta", replace;
};
这很有效。但是,当我尝试像这样并行运行此代码时:

parallel setclusters 2
parallel do "myloop.do"
parallel setclusters 2
parallel do "myloop.do", keep
它挂起“等待集群完成”

我如何诊断出哪里出了问题?有没有更好的方法并行提取数据并将所有文件附加在一起?


我使用的是2014年6月17日版本的并行模块1.14.6.17。

您使用的是什么ODBC驱动程序?到哪种数据库类型

这听起来像是一种情况,在这种情况下,驱动程序可能只能处理每个连接的一条语句。很难说不知道驾驶员级别发生了什么

我建议创建一个ODBC跟踪,以查看挂起时ODBC调用正在执行的操作。检查可能是“等待”消息根本原因的任何潜在错误


检查驱动程序文档,了解每个连接和线程的语句数量的详细信息;在这种情况下,这可能是一个因素。

如果你想知道平行幕后的情况,你应该像这样使用keep选项:

parallel setclusters 2
parallel do "myloop.do"
parallel setclusters 2
parallel do "myloop.do", keep
这将告诉parallel,它不应该删除辅助文件(其中包括日志文件)

此外,如果您达到,您可以随时在项目回购处签出最新版本


如果有帮助,请告诉我。

更新,现在您可以使用
并行追加
命令。您可以查看新版本(1.15.8.19 19ago2015,已经在SSC中),或者在项目回购中,问题是myloop.do不能用分号分隔。keep选项允许我对其进行诊断。有没有什么方法可以并行处理这样的文件,这样我就不必重新格式化它了?我们可以看看,如果你能通过在项目的网站上添加一个新的问题来包含更多的细节,那就太好了。同时,也许您可以尝试在文件的开头和结尾显式使用
setdelim
。谢谢你的帮助。