1

我有一个有点大的表(1.3 亿行),我能够在 10 分钟内在同一台服务器上处理它,并生成一个精简的预聚合表,它工作得很好,每个人都乐于使用它.

该表由大约 6 列分组,其余列与HLL优化的SUM()或各种聚合。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 数据提取。

使用 Tableau 从 cassandra 列中查找不同计数

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

4

1 回答 1

0

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

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

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

于 2018-10-29T15:51:28.160 回答