【发布时间】:2017-04-20 12:31:25
【问题描述】:
我需要一个理论上的答案。
假设您有一个包含 15 亿行的表(该表是使用 DB2-Blu 创建为基于列的)。
您正在使用 SAS,您将使用 Proc Summary 进行一些统计,例如最小/最大值/平均值、标准差值和 percentile-10、percentile-90 通过您的同行组。
例如,您有 30.000 个对等组,每个对等组中有 50.000 个值(总计 15 亿个值)。
在另一种情况下,您有 300 万个对等组,并且每个对等组中有 50 个值。所以你又拥有了 15 亿个价值。
如果您的对等组较少但每个对等组中的值更多,它会更快吗?或者,如果有更多的同级组,但每个同级组中的值较少,它会更快吗?
我可以测试第一个案例(30.000 个对等组和每个对等组 50.000 个值),大约需要 16 分钟。但我无法测试第二种情况。
如果我有 300 万个对等组并且每个对等组中还有 50 个值,您能否为运行时间编写一个近似预测?
问题的另一个维度。如果我改用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;
【问题讨论】:
-
数据是按组排序还是按组有索引?您使用的是
CLASS还是BY语句? -
@DomPazz 我们的系统管理员说在 DB2-Blu(基于列)中不需要索引,它本身有某种智能解决方案。它的执行速度确实比基于行的索引表快了一倍。
-
@DomPazz 我在
Proc Summary中使用Class -
我认为您需要特别验证的一件事是百分位数计算。数据库似乎对这个计算有问题,所以如果 DB2-Blu 有一个特定的百分位数函数会有所帮助。您是否可以选择使用 SQL Pass through?在 DB2 SQL 中将查询传递给 DB2 可能是最快的方法。
标签: sql sas statistics db2 proc-sql