我需要一个理论上的答案。
假设您有一个包含15亿行的表(该表是使用DB2-Blu创建为基于列的)。
您正在使用SAS,并且将Proc Summary通过对等组使用最小值/最大值/平均值,标准偏差值和百分位数10,百分位数90做一些统计。
Proc Summary
例如,您有30.000个对等组,每个对等组中有50.000个值(总计15亿个值)。
在另一种情况下,您有300万个对等组,每个对等组中也有50个值。这样,您又有了15亿的总价值。
如果您的对等组较少,但每个对等组中的值更多,会更快吗?否则,使用更多的对等组会更快,但每个对等组中的值会更少。
我可以测试第一种情况(30.000个对等组和每个对等组50.000个值),大约用了16分钟。但是我无法测试第二种情况。
如果我有300万个对等组,并且每个对等组中都有50个值,那么您可以写出运行时的近似预测吗?
这个问题的另一个维度。如果改用这些统计信息,会更快Proc SQL吗?
Proc SQL
示例代码如下:
proc summary data = table_blu missing chartype; class var1 var2; /* Var1 and var2 are toghether peer-group */ var values; output out = stattable(rename = (_type_ = type) drop = _freq_) n=n min=min max=max mean=mean std=std q1=q1 q3=q3 p10=p10 p90=p90 p95=p95 ; run;
因此,这里有很多事情要考虑。
首先,性能上最大的一点是将数据从DB2导入SAS。(我假设这不是SAS的数据库实例- 如果是,请更正)。那是一张大表,在电线上移动它需要时间。因此,如果您可以使用SQL语句在DB2内计算所有这些统计信息,那么这可能是您最快的选择。
因此,假设您已将该表下载到SAS服务器:
CLASS与未排序的表相比,按变量排序的表处理起来要快得多。如果SAS知道该表已排序,则不必扫描该表以查找要放入组的记录,它可以进行块读取,而不是随机IO。
CLASS
如果未对表进行排序,则组数越多,则必须进行的表扫描越多。
关键是,在未经排序的过程中,将数据从高清数据传输到CPU的速度至关重要。
从那里,您会遇到内存和CPU问题。PROC Summary是多线程的,SAS一次将读取N个组。如果组大小可以容纳为该线程分配的内存,则不会有问题。如果组的大小太大,则SAS必须分页。
我将问题缩小为一个1500万行的示例:
%let grps=3000; %let pergrp=5000;
未分类:
NOTE: There were 15000000 observations read from the data set WORK.TEST. NOTE: The data set WORK.SUMMARY has 3001 observations and 9 variables. NOTE: PROCEDURE SUMMARY used (Total process time): real time 20.88 seconds cpu time 31.71 seconds
排序:
NOTE: There were 15000000 observations read from the data set WORK.TEST. NOTE: The data set WORK.SUMMARY has 3001 observations and 9 variables. NOTE: PROCEDURE SUMMARY used (Total process time): real time 5.44 seconds cpu time 11.26 seconds
============================
%let grps=300000; %let pergrp=50;
NOTE: There were 15000000 observations read from the data set WORK.TEST. NOTE: The data set WORK.SUMMARY has 300001 observations and 9 variables. NOTE: PROCEDURE SUMMARY used (Total process time): real time 19.26 seconds cpu time 41.35 seconds
NOTE: There were 15000000 observations read from the data set WORK.TEST. NOTE: The data set WORK.SUMMARY has 300001 observations and 9 variables. NOTE: PROCEDURE SUMMARY used (Total process time): real time 5.43 seconds cpu time 10.09 seconds
我运行了几次,运行时间相似。排序时间大致相等,并且速度更快。
组越多/组越少,未排序的速度就越快,但是从总CPU使用率来看,它更高。我的笔记本电脑具有非常快的SSD,因此IO可能不是限制因素- HD能够满足多核CPU的需求。在HD速度较慢的系统上,总运行时间可能会有所不同。
最后,它在很大程度上取决于数据的结构以及服务器和数据库的详细信息。