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

标签 postgresql tableau-api 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))

结果以毫秒为单位生成。

问题是将其移动到 Tableau作为 Hyper 中的提取物,因为人们想在那里使用它。 Tableau 不了解 HLL,它想自己进行非重复计数。然而,推送所有这些原始数据非常慢(慢 5 小时)。

我愿意在速度上做出妥协,但不会从 10 分钟缩短到 5 小时。有没有办法将当前表示为 HLL 的集合作为整个列传输?比如数组或 JSON 之类的?

我在这里发现了一个类似的问题,但它更多地是关于 Cassandra 而不是关于 Tableau 数据提取。

Finding the distinct count from a cassandra column using Tableau

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

最佳答案

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

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

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

关于postgresql - 使用 HLL 在 Tableau 上执行提取以获取非重复计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53013500/

相关文章:

sql - 选择不带 NULL 的不同的多个字段

python - Heroku/Django - 找不到 Postgresql 数据库

postgresql - 在 mac 上打开 pgAdmin 4 时出错

sql - Postgres - 检查数组是否包含预期值以外的值

javascript - Tableau API JavaScript 筛选器示例

c# - 如何独立获得每个属性的不同值

SQL 复杂唯一约束

command-line - 通过 tabcmd 在 tableau 上发布报告

tableau-api - 从 tableau 服务器连接 amazon redshift 服务器

python - 删除 Pandas 记录中的重复值