【问题标题】:aggregating weekly data in hive在 hive 中聚合每周数据
【发布时间】:2014-01-08 08:38:45
【问题描述】:

我想根据以下查询中指定的条件每周汇总过去 3 个月的帐户计数。在以 num_of_accounts 和周为列的表中获取此数据的最有效方法是什么。

select COUNT(DISTINCT a.account_id) as num_accounts,
WEEKOFYEAR(a.ds) as week
FROM
    (SELECT
    CAST(account_id as BIGINT)
    FROM
    tableA
    WHERE ds='2013-12-28') a
JOIN   
    tableB b
ON a.account_id=b.account_id AND
    b.ds='2013-12-28'
WHERE
b.invoice_date between '2013-12-22' AND '2013-12-28' AND
b.payment_status = 'failed' AND b.payment_status = 'unbilled'

【问题讨论】:

    标签: sql hadoop hive hiveql


    【解决方案1】:

    您正在尝试对一个大集合进行唯一计数。一种可扩展的方法是使用概率数据结构,如 hyperloglog 或 KMV 草图集,如 Brickhouse (http://github.com/klout/brickhouse) 中提供的那些。在http://brickhouseconfessions.wordpress.com/2013/12/11/using-sketch_set-for-reach-estimation/ 上有一篇博客文章描述了您的情况。这应该会给您一个相当接近的估计,而不必完全使用您的数据。

    如果我理解正确,您只想按周聚合,其中有一个 Hive UDF WEEKOFYEAR 从日期字符串返回一周。只需使用 Brickhouse 的 sketch_set UDAF

    SELECT WEEKOFYEAR( ds), estimated_reach( sketch_set( account_id ) ) as num_account_est
      FROM myquery
    GROUP BY WEEKOFYEAR( ds);
    

    其中 myquery 是表示您在上面表达的业务逻辑的视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-17
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多