summary
语法
summary(X,[interpolation],[characteristic],[percentile],[precision],[partitionSampling])
详情
生成数据的汇总统计信息,返回一个内存表,包含最小值、最大值、计数、均值、标准差和指定的百分位数(以升序输出)。
-
若 X 是表,则
summary
只统计表中数值类型的列,忽略非数值类型的列。 -
若 X 是数据源,则数据源只能包含数值类型的列,否则在进行
summary
统计时会报错。
参数
X 可以是内存表、DFS 表或由 sqlDS 函数生成的数据源。注意:暂不支持由 sqlDS
生成的包含表连接的数据源。
interpolation 字符串,表示计算百分位采用的插值方法,可以是 'linear'(默认值), 'nearst', 'lower', 'higher', 'midpoint'。
characteristic 字符串标量或向量,表示需要输出的统计特征。可选值为 'avg', 'std'。若不指定该参数,则默认同时输出 'avg' 和 'std'。
percentile DOUBLE 类型向量,范围是[0,100]。默认值为 [25, 50, 75],表示返回第25, 50和75百分位数。
precision 大于0的 DOUBLE 类型标量,表示插值计算百分位时的迭代精度。默认值为 1e-3。当前计算结果与上一次迭代计算结果的差值小于等于该值时,将退出迭代。建议取值范围为[1.000e-3, 1.000e-9],若值较小,则可能因迭代次数过多而导致性能下降;若值较大,则可能导致计算的结果不精确。
-
对于分区表:
-
至少会选择1个分区,即当 partitionSampling 是浮点数,且 partitionSampling * 分区总个数小于1时,会选取1个分区;当 partitionSampling * 分区总个数是大于1,但不是一个整数时,则向下取整。比如 partitionSampling=0.26,分区总个数为10,则会随机选取2个分区。
-
若指定的分区个数大于实际分区数量,则会选择所有分区。
-
-
对于非分区表,指定该参数不会生效;
例子
n=2022
data=1..n
value=take(1..3,n)
name=take(`APPLE`IBM`INTEL,n)
t=table(data,value,name);
summary(t, precision=0.001);
// name 非数值类型,不会输出到表中
输出返回:
name | min | max | nonNullCount | count | avg | std | percentile |
---|---|---|---|---|---|---|---|
data | 1 | 2,022 | 2,022 | 2,022 | 1,011.5 | 583.8454 | [506.24,1011.50,1516.75] |
value | 1 | 3 | 2,022 | 2,022 | 2 | 0.8167 | [1.00,1.99,2.99] |
n = 5000
data1 = take(1..5000000, n)
data2 = rand(10000000, n)
data3 = take("A" + string(0..10), n)
t = table(data1, data2, data3)
dbname = "dfs://summary"
if(existsDatabase(dbname)) {
dropDatabase(dbname)
}
db = database(dbname, HASH, [INT, 10])
pt = createPartitionedTable(db, t, `pt, `data1)
pt.append!(t)
ds = sqlDS(<select data1,data2 from loadTable(db, `pt)>)
query_percentile = [25,50,75,90]
ds_re1 = summary(ds);
// 返回第25, 50, 75, 90 百分位值
ds_re2 = summary(ds, percentile=query_percentile, precision=0.0001);
// 分区占比为 0.6,即统计6个分区数据的信息
ds_re3 = summary(loadTable(db, `pt), percentile=query_percentile, precision=0.0001, partitionSampling=0.6);