Sql 在配置单元中聚合每周数据

Sql 在配置单元中聚合每周数据,sql,hadoop,hive,hiveql,Sql,Hadoop,Hive,Hiveql,我想根据下面查询中指定的条件,在过去3个月内每周汇总一次帐户计数。在以num_of_accounts和weeks为列的表中获取此数据的最有效方法是什么 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

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

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'

您正在尝试对一个大集合进行唯一计数。一种可扩展的方法是使用概率数据结构,如hyperloglog或KMV草图集,如Brickhouse()中提供的。有一篇博客文章描述了一个和你一样的情况。这应该给你一个相当接近的估计,而不必完全依赖你的数据

如果我理解正确,您只需要按周进行聚合,其中有一个Hive UDF
WEEKOFYEAR
,它从日期字符串返回一周。只需使用Brickhouse的
sketch\u集
UDAF即可

SELECT WEEKOFYEAR( ds), estimated_reach( sketch_set( account_id ) ) as num_account_est
  FROM myquery
GROUP BY WEEKOFYEAR( ds);
其中myquery是一个视图,表示上面所表达的业务逻辑