使用 HLL 在 Tableau 上执行提取以获取非重复计数

Execute extract on Tableau for distinct count using HLL

我有一个有点大的 table(1.3 亿行),我能够在 10 分钟内在同一台服务器上处理,并生成一个精简的、预先聚合的 table,效果很好,大家都很乐意使用它。

table 由大约 6 列分组,其余的与 SUM() 或使用 HLL 优化的各种 COUNT(DISTINCT myColumn) 聚合。

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

使用这个小结果 table 的人可以仅按 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) 计算?

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

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

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