ChenHuajun / pg_roaringbitmap

RoaringBitmap extension for PostgreSQL
Apache License 2.0
218 stars 37 forks source link

标签值达到一定值则函数不能使用rb_and_agg等函数 #11

Closed wuchen0221 closed 2 years ago

wuchen0221 commented 4 years ago

例如标签字段SEX的值的个数是57262429,而使用rb_and_agg,rb_or_cardinality_agg函数都无法返回正常结果,相同条件下标签值的个数较少时则正常 链接:https://pan.baidu.com/s/1C1mt96BrlcDRj_5M1ki8OQ 提取码:8e8t 链接:https://pan.baidu.com/s/18C10tQFmynkBsZZ5gtQXQw 提取码:3u3p

ChenHuajun commented 4 years ago

确认一下and之后是不是都抵消了成为空的了

wuchen0221 commented 4 years ago

用and是因为将标签名和标签值联合查询,通过明细表确定是有交集的。怀疑是不是数据集过大导致超出限制。 select tagvalue from tag where tagtype='chname' and tagname='张伟' -- 60622条记录 select tagvalue from tag where tagtype='sex' and tagname='女' -- 57262429条记录 在明细表中求select count(*) from detail where chname = '张伟' and sex = '女' --10233条记录 用其他方式统计: select count(T.id) from ( select unnest(rb_to_array( tagvalue)) as id from tag where tagtype = 'chname' and tagname='张伟' intersect select unnest(rb_to_array( tagvalue)) as id from tag where tagtype = 'sex' and tagname='女' ) T; -- 10233条记录

ChenHuajun commented 4 years ago

用的是不是最新0.5.1版本? 我这边复现不了你说的问题。参考下面,构造一个能复现的例子吧

=# with t(bitmap) as(
select rb_fill('{}',1,100000000)
union all 
select rb_fill('{}',1,50000)
)
select rb_and_cardinality_agg(bitmap) from t;
 rb_and_cardinality_agg 
------------------------
                  49999
(1 row
ChenHuajun commented 2 years ago

无法复现,先关闭