我们正在使用Apache Druid对数据集进行基于时间序列的分析,并且一直试图为其中一种分析计算模式。
统计模式告诉我们有关数据集中最频繁重复的数据点。
示例:给定如下数据集,请尝试计算每种产品最具代表性的销售时段
数据集:
Product ID Month Sale Bucket
Pid1 January 10-20
Pid1 February 0-10
Pid1 March 10-20
Pid2 January 0-10
Pid2 February 10-20
Pid2 March 0-10
预期输出:
Product ID Sale Bucket
Pid1 10-20
Pid2 0-10
尝试了一个简单的Google搜索,以查找是否有内置功能或扩展功能可以执行相同操作。 找不到一个。
然后,我开始尝试使用天真的方法通过以下步骤对此数据集执行模式:
第1步。获取数据点的相关频率(按产品ID和销售时段分组) 产生
Product ID Sale Bucket Frequency
Pid1 10-20 2
Pid1 0-10 1
Pid2 10-20 1
Pid2 0-10 2
步骤2。以每个产品的最大频率(从1中计算出的频率中)获取相关数据点。我被困在第2点,尝试了2种方法:
有人对进一步进行有任何想法吗?
答案 0 :(得分:0)
在数据库中执行此操作的常规方法是使用窗口函数,Druid不支持这些函数。可能会发生以下情况:
with ps as (
select product, salebucket, count(*) as cnt
from t
group by product, salebucket
)
select ps.product, ps.salebucket
from ps join
(select ps.product, max(cnt) as max_cnt
from ps
group by ps.product
) ps2
on ps2.product = ps.product and ps2.max_cnt = ps.cnt;
我不确定100%是否符合Druid SQL的约束,但这可能对您有用。