我有一个很大的表(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)
计算?
答案 0 :(得分:0)
我设法在Tableau中使用pass-through SQL functions解决了此问题。添加包含HLL列的数据源(仅LIVE)后,使用如下表达式创建自定义计算列:
rawsqlagg_int("hll_cardinality(hll_union_agg(%1))", [Set of entities])
我得到了所需的结果。惊人而又快速。