
168
|
第
9
章
为了实现近似的不同值
3
统计,
Presto
提供了
HyperLogLog
数据类型(用户也可以使用它),
这意味着它可以存入表中。这非常有价值,因为你可以存储计算结果,以便以后再合并。
假设你的数据是按天划分的,每天你可以为当天的用户创建一个
HyperLogLog
结
构并存
储。然后,当你想计算近似基数时,可以将
HyperLogLog
合并到一起得出结果。
9.19
窗函数
Presto
支持使用
SQL
中的标准
窗函数
(
window
function
),它允许你定义一组记录作为函
数的输入。
例如,我们来看看鸢尾花的萼片长度(参见
1.4.7
节
)。
如果没有窗函数,可以按如下方式计算所有品种的萼片平均长度:
SELECT avg(sepal_length_cm)
FROM memory.default.iris;
5.8433332
另外,你也可以计算出特定品种的平均长度:
SELECT avg(sepal_length_cm)
FROM memory.default.iris
WHERE species = 'setosa';
5.006
但是,如果你想列出所有测量值,并将每个测量值与整体平均数比较呢?
OVER()
窗函数可
以让你做到这一点:
SELECT species, sepal_length_cm,
avg(sepal_length_cm) OVER() AS avgsepal
FROM memory.default.iris;
species | sepal_length_cm | avgsepal ...