我需要保留28天的一些仪表板数据历史记录。本质上,我有一个事件/操作是通过我们的BI系统记录的。我想计算事件的数量以及过去1天,7天和28天执行该事件的不同用户。我还使用分组集(多维数据集)来按国家/浏览器/平台等获取完全细分的数据。
过去的做法是,对于所有细分受众群,每位用户保持28天的历史记录。因此,如果用户连续28天每天都通过移动设备和台式机访问该网站,则数据库中将有54行。这最终是一个大表,并且即使计算出rox_distinct也很费时间。但是问题是我也希望计算出rox_percentiles。
因此,我开始调查HyperLogLog https://prestodb.io/docs/current/functions/hyperloglog.html的用户。
这非常有效,它每天存储草图的效率要高得多,而不是每天存储唯一用户的整个列表。当我使用rox_distinct时,这些值足够接近并且可以正常工作。
然后,我发现中位数具有相似的功能。 Qdigest。 https://prestodb.io/docs/current/functions/qdigest.html 不幸的是,此页面上的文档不如前几页那么好,因此我花了一些时间才弄清楚。这对于计算每日中位数非常有用。但是,如果我想计算较长时间段内每个用户的平均操作数,该方法将不起作用。 HyperLogLog中的示例演示了如何计算一段时间内的rox_distinct用户,但Qdigest文档未提供此类示例。
当我尝试使用Qdigest对日期范围的HLL示例进行某些操作时得到的结果,我得到的结果类似于1天的结果。
答案 0 :(得分:1)
由于您需要基于每个用户在多天内进行汇总(汇总)的中位数,因此需要在插入qdigest之前执行该汇总,以使其在7-和每位用户28天的计数。换句话说,数据的单位必须保持一致,并且如果将每日值插入到qdigest中,则无法将qdigest用于事件的每用户7天或28天计数。