用途:在 Hologres 中构建实时、增量的 UV/PV 计算管道,利用动态表(Dynamic Table)与 RoaringBitmap 实现十亿级记录的低延迟去重与灵活时间范围聚合。
主要能力:相比传统 COUNT DISTINCT 的全表扫描,该方案通过预聚合位图与增量刷新,实现高基数 UID 下的亚秒级 UV 查询;使用 RB_OR_AGG 可合并任意日期范围的位图,实现跨天精确去重。核心函数包括 RB_BUILD_AGG、RB_OR_AGG、RB_AND_AGG、RB_CARDINALITY、RB_TO_ARRAY、RB_CONTAINS 等。
使用方式:先安装依赖 pip install hologres-cli 并设置 export HOLOGRES_SKILL=hologres-uv-compute。随后启用扩展 CREATE EXTENSION IF NOT EXISTS roaringbitmap,创建按 ymd 分区的 ODS 明细表,再创建增量刷新的 DWS 动态表 dt_dws_app_rb,用 RB_BUILD_AGG(uid) 聚合位图。查询时用 RB_CARDINALITY(RB_OR_AGG(rb_uid)) 计算 UV,SUM(pv) 计算 PV。历史分区需手动执行 REFRESH DYNAMIC TABLE ... PARTITION(...) WITH (refresh_mode = 'full')。文本 UID 可用 hg_id_encoding_int4(V4.1+)或映射表转为整数。
适用场景:实时 UV/PV 统计、留存与漏斗分析、跨平台去重等。
限制:需 Hologres 环境与 hologres-cli;hg_id_encoding_int4 要求 V4.1+ 且映射表须为一个 text 主键列加一个 serial 列,输入 UID 不可为 NULL;自动刷新仅覆盖活跃分区,历史数据需手动刷新。