使用HLL

时间:2018-10-26 17:14:36

标签: postgresql tableau distinct-values hyperloglog

我有一个很大的表(1.3亿行),我可以在10分钟内在同一台服务器上处理数据,并生成精简的,预先汇总的表,该表工作得很好,每个人都很高兴使用它。

该表按大约6列分组,其余的则与SUM()或经过HLL优化的各种COUNT(DISTINCT myColumn)进行汇总。

hll_union_agg(hll_add(hll_empty(15, 4), hll_hash_bigint(my_column)))

使用此较小结果表的人可以仅按原始列的1或2进行分组,以获得更广泛的摘要。仅在最后一步,使用

产生实际计数
hll_cardinality(hll_union_agg(my_intermediary_hll_set))

结果以毫秒为单位。

问题是将其作为Hyper中的摘录内容移至Tableau,因为人们想在那里使用它。 Tableau不了解HLL,它想自己进行不重复计数。但是,推送所有这些原始数据非常慢(例如慢5个小时)。

我愿意在速度上做出让步,但不要花10分钟到5个小时。有没有一种方法可以将当前表示为HLL的集合作为整个列进行传输?像数组或JSON之类的东西?

我在这里发现了一个类似的问题,但更多的是Cassandra而不是Tableau提取物。

Finding the distinct count from a cassandra column using Tableau

总结一下:
如何将预聚合的行传递到Tableau,并且仍然能够在Tableau端生成有效的COUNT(DISTINCT x)计算?

1 个答案:

答案 0 :(得分:0)

我设法在Tableau中使用pass-through SQL functions解决了此问题。添加包含HLL列的数据源(仅LIVE)后,使用如下表达式创建自定义计算列:

rawsqlagg_int("hll_cardinality(hll_union_agg(%1))", [Set of entities])

我得到了所需的结果。惊人而又快速。