如何使用每日数据构建年度数据



我有一组构造的数据:

[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。这使得计数(不同(不可扩展。

,但如果适用估计,您可能可以根据草图算法进行一些密切的估计。

几乎没有用于使用蜂巢的草图算法的实现。

  1. 这个用于Hive的超置槽:Hllhiveudfs从Yahoo

  2. 绘制库在
  3. 再实施:https://github.com/mlnick/hive-udf/wiki

最新更新