用于 Redshift 的 Postgresql-hll(或另一个 Hyperloglog 数据 type/structure)
Postgresql-hll (or another Hyperloglog data type/structure) for Redshift
需要能够报告唯一身份访问者,但希望避免预先计算每个可能的键排列并创建多个 tables。
作为一个简单的示例,假设我需要在具有以下列
的 table 中报告每月唯一身份
- 日期 (Month/Year)
- page_id
- country_id
- device_type_id
- monthly_uniques
在 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;
需要能够报告唯一身份访问者,但希望避免预先计算每个可能的键排列并创建多个 tables。
作为一个简单的示例,假设我需要在具有以下列
的 table 中报告每月唯一身份- 日期 (Month/Year)
- page_id
- country_id
- device_type_id
- monthly_uniques
在 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;