我们在SAS环境中有一个大型的数据集,其中有3000万条记录和小型数据集,每条记录有100000条记录。加入较小的数据集与大型数据集
我们必须将这些较小的数据集与“大型”表结合在一起,大型数据集加入较小的数据集需要大约30-40分钟。
如果我们单独为5-6个数据集运行作业,则花费了大量时间。如果我们将所有这些数据集合并到一个数据集中,然后进行左连接,与个人相比,它会花费更少的时间吗?另外,WORK中存在空间紧缩,所以我们也必须考虑这一点。
我们在SAS环境中有一个大型的数据集,其中有3000万条记录和小型数据集,每条记录有100000条记录。加入较小的数据集与大型数据集
我们必须将这些较小的数据集与“大型”表结合在一起,大型数据集加入较小的数据集需要大约30-40分钟。
如果我们单独为5-6个数据集运行作业,则花费了大量时间。如果我们将所有这些数据集合并到一个数据集中,然后进行左连接,与个人相比,它会花费更少的时间吗?另外,WORK中存在空间紧缩,所以我们也必须考虑这一点。
尝试哈希联接
DATA want;
IF 0 THEN SET SMALL_DATA_SET;
if _N_ = 1 then do;
declare hash HASH_NAME(dataset:"SMALL_DATA_SET", multidata:'y');
HASH_NAME.defineKEY("YOUR_KEY_VARIABLE");
HASH_NAME.defineData (ALL:'YES');
HASH_NAME.defineDone();
END;
set BIG_DATA_SET;
IF
HASH_NAME.FIND(KEY:YOUR_KEY_VARIABLE) = 0 THEN OUTPUT;
RUN;
为这种情况最好的解决办法是使用修改声明,这就地修改主数据集不用从头重新创建它。请始终记住要备份的数据集是修改,因为如果在处理过程中出现任何问题,数据集将无法使用。
本文有大量的信息,但有大量的文档可以找到。
http://www.lexjansen.com/pnwsug/2006/PN01CurtisMackModify.pdf
干杯
你怎么看这些数据集?你有SQL数据库吗?或者你做REST API调用? –
@ evgeny.myasishchev我们使用SAS企业,所以所有的数据集都在SAS上。没有API调用。 – rns
如果你有足够数量的RAM(小表的大小小于RAM),完美的解决方案是SAS散列表。 –