用于 Redshift 的 Postgresql-hll(或另一个 Hyperloglog 数据 type/structure)

Postgresql-hll (or another Hyperloglog data type/structure) for Redshift

需要能够报告唯一身份访问者,但希望避免预先计算每个可能的键排列并创建多个 tables。

作为一个简单的示例,假设我需要在具有以下列

的 table 中报告每月唯一身份

在 Druid 和 Redis 中,Hyperloglog 数据类型将解决这个问题(假设误差很小是 acceptable),我可以通过任何组合 运行 查询的维度,并获得唯一性的可行估计。

我在 PostgreSQL 世界中找到的最接近的插件是 postgresql-hll 插件,但它似乎适用于 PostgreSQL 9.0+。

有没有一种方法可以在 Redshift 中表示这一点,而无需预先计算或存储访问者 ID(大大增加 table 大小,但允许使用 RedShift 的 "approximate count" hll 实现)?

注意:RedShift 是首选平台,但我已经知道其他自托管 PostgreSQL 分支可以支持它,例如 CitusDB。寻找使用 RedShift 执行此操作的方法。

Redshift 虽然从技术上讲是 postgresql 派生的,但它是在十多年前分叉出来的。它仍然使用与 postgres 相同的行协议,但是它的代码已经有很大的不同。在其他不兼容性中,它不再允许自定义数据类型。这意味着您要使用的插件类型不可行。

但是,正如您所指出的,如果您能够获取所有原始数据,则可以使用内置的近似功能。

Redshift 最近宣布支持 HyperLogLog Sketches:

Redshift 于 2020 年 10 月宣布了新的 HLL 功能。如果您的 Redshift 发布版本为 1.0.19097 或更高版本,您可以使用所有可用的 HLL 功能。在 AWS Redshift documentation here

查看更多

你可以这样做

SELECT hll(column_name) AS unique_count FROM YOURTABLE;

或创建HLL sketches directly