Sql 清理/操作大数据的解决方案(目前使用Stata)

Sql 清理/操作大数据的解决方案(目前使用Stata),sql,r,bigdata,stata,data-processing,Sql,R,Bigdata,Stata,Data Processing,我目前使用的是一个非常大的数据集(10个变量,超过3亿行)的10%样本,当以.dta格式存储整个数据集时,数据量超过200 GB。对于10%的样本,在具有约50G RAM和多核的UNIX服务器上使用Stata MP时,Stata能够在合理的时间内处理egen、折叠、合并等操作 但是,现在我想继续分析整个样本。即使我使用的机器有足够的RAM来保存数据集,简单地生成一个变量也需要很多时间。(我认为可能是后台操作导致Stata运行到虚拟内存中) 这个问题也很容易并行化,即数据集中的行彼此独立,因此我可

我目前使用的是一个非常大的数据集(10个变量,超过3亿行)的10%样本,当以.dta格式存储整个数据集时,数据量超过200 GB。对于10%的样本,在具有约50G RAM和多核的UNIX服务器上使用Stata MP时,Stata能够在合理的时间内处理egen、折叠、合并等操作

但是,现在我想继续分析整个样本。即使我使用的机器有足够的RAM来保存数据集,简单地生成一个变量也需要很多时间。(我认为可能是后台操作导致Stata运行到虚拟内存中)

这个问题也很容易并行化,即数据集中的行彼此独立,因此我可以很容易地将一个大数据集与100个小数据集联系起来

是否有人对如何处理/分析这些数据有任何建议,或者可以就我目前的一些建议向我提供反馈?我主要使用Stata/SAS/MATLAB,因此可能还有其他一些我根本不知道的方法

以下是我目前的一些想法:

  • 将数据集拆分为较小的数据集,并在Stata中使用非正式的并行处理。我可以在每个分区上运行清理/处理/分析,然后在没有存储所有中间部分的情况下合并结果

  • 使用SQL存储数据,并执行一些数据操作,例如对某些值进行聚合。这里的一个问题是,Stata可以相当容易地处理的一些任务(例如跨时间比较值)在SQL中无法很好地工作。另外,在SQL中对30%的数据样本运行某些查询时,我已经遇到了性能问题。但也许我没有通过正确的索引进行优化,等等。而且,碎片查询似乎可以帮助实现这一点,但我还没有对其进行深入研究

  • R看起来也很有希望,但我不确定它是否能解决处理如此大量数据的问题


  • 由于您熟悉Stata,因此有一个关于Stata中的大型数据集的文档化常见问题解答:您可能会发现这很有帮助

    我会通过列进行清理,将这些列拆分,运行任何特定的清理例程,然后
    merge
    稍后返回


    根据您的计算机资源,您应该能够使用
    tempfile
    在多个临时文件中保存各个列。注意只选择与您的分析最相关的变量或列,可以大大减少集合的大小。

    感谢那些评论和回复的人。我意识到我的问题与此类似。我已经用Stata将一些数据操作代码重新写入SQL,响应时间要快得多。我相信,通过正确利用索引并在必要时通过分区/碎片进行并行处理,我可以获得巨大的优化收益。完成所有数据操作后,我可以通过Stata中的ODBC导入该数据

    JSS从R的角度及时涵盖了这些问题。可能会有一些帮助,但是他们在示例中使用的数据大小是12GB。您提到的链接不应该指向吗?谢谢@D3L。这里的问题是,我正在运行一些需要列之间交互的数据操作代码。将行拆分是一种可能的解决方案,但对于我正在执行的任务来说,这相当麻烦。