我有一个包含以下列的matlab表。让我们称之为'参考表': [Security(char),RegionId(int 1,2,3)] 该表的高度约为49,000
我有其他表包含Security(char)和随机数据点作为列。让我们调用这些表的数据表。 这些数据表的总大小为45Gigs。这些表中的每一个都是> 1亿行。 我需要使用引用表来映射regionId并执行以下操作:
[Security(char),RandomDataPoint(float)]> [Security(char),RegionId(int 1,2,3),RandomDataPoint(float)]
通常,对于此操作,我会使用表连接。但是,由于这些表的大小,我对此实现存在实际问题。我的主要问题是内存不足。
一种选择是将表分解为多个部分并加入。但是,我怀疑考虑到45Gigs的汇总数据,这在时间上会非常昂贵。
有没有人对如何解决这个问题有任何建议。如果重要,我需要将region列添加到我的数据表中,这样我就可以将数据写入文本文件并将它们批量加载到sql中。
提前致谢
答案 0 :(得分:0)
我知道回答你自己的问题很不好,但这就是我最终的结果。
经过大量测试后,我发现这是最快的。 我完全放弃了加入。
maskfor1 = ismember(data.Securities,reference.Securities(reference.RegionId==1))
现在我使用maskfor1减少了我必须针对regionId == 2检查的证券数量。然后我重新创建了maskfor2应该是什么样子。
maskFor2 = zeros(height(data.Securities),1);
minitureMaskFor2 = ismemeber(data.Securities(~masfor1),reference.Securities(reference.RegionId==2))
maskFor2(~maskfor2) = minitureMaskFor2;
其余的是regionId = 3.现在使用掩码为表创建regionId列。
此过程大约需要1分20秒才能运行1亿行。