【问题标题】:How to used daily data to construct yearly data?如何利用日数据构建年数据?
【发布时间】:2019-05-01 20:33:52
【问题描述】:

我有一组数据结构如下:

[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

【问题讨论】:

    标签: sql hadoop hive impala


    【解决方案1】:

    不幸的是,count(distinct uid) 不是相加的,您需要重新迭代整个年份数据集,您不能计算某一天的不同并将其添加到现有的累计年份不同计数中。因为如果相同的 UID 存在于许多不同的日子,那么第一天的 count(distinct uid) + 第二天的 count(distinct uid) 不等于这两天计算的 count(distinct uid)。这使得 count(distinct) 不可扩展。

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

    Hive 的草图算法实现很少,可供使用。

    1. Hive 的 HyperLogLog:HllHiveUDFsSketches library from Yahoo

    2. Brickhouse sketch UDFs - “K-最小值”草图算法。

    3. 另一个实现:https://github.com/MLnick/hive-udf/wiki

    【讨论】:

      猜你喜欢
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多