我有一组构造的数据:
[uid, product, currency, platform, date]
[100, product_1, USA, desktop, 2019-01-01]
[100, product_2, USA, desktop, 2019-01-03]
[200, product_3, CAN, mobile, 2019-01-02]
[300, product_1, GBP, desktop, 2019-01-01]
and so on...
数据必须每年汇总:
[year, product, currency, platform, uid_count]
[2019, product_1, USA, desktop, 1000]
[2019, product_2, USA, desktop, 2000]
[2019, product_3, GBP, mobile, 5000]
在研究了一个解决方案后,我阅读了有关素描算法的素描,这些算法似乎是正确的方向。本质上,数据太大而无法加载一批,因此我需要每天逐步处理它,因此我是不运行SQL查询,例如:
SELECT year(date), product, currency, platform, count(distinct uid) FROM tbl_name GROUP BY 1, 2, 3, 4
或
SELECT year(date), product, currency, platform, count(distinct uid) FROM tbl_name GROUP BY 1, 2, 3, 4
with cube
不幸的是, count(distinct uid)
不是加性的,您需要重新介绍整个年数据集,您不能计数一天的数量,并将其添加到现有的累积年度数量中。因为如果在许多不同的日子内存在相同的UID,则在第二天的第一天 count(distinct uid)
在这两天计算的count(distinct uid)
不等于CC_4。这使得计数(不同(不可扩展。
,但如果适用估计,您可能可以根据草图算法进行一些密切的估计。
几乎没有用于使用蜂巢的草图算法的实现。
-
这个用于Hive的超置槽:Hllhiveudfs从Yahoo
绘制库在 再实施:https://github.com/mlnick/hive-udf/wiki