【已解决】BITMAP正交函数ORTHOGONAL_BITMAP_EXPR_CALCULATE_COUNT结果异常问题

Viewed 65
WITH 
a AS (
	SELECT BITMAP_UNION(TO_BITMAP(user_id)) AS uid FROM tbl_a WHERE ...
),
b AS (
	SELECT BITMAP_UNION(TO_BITMAP(user_id)) AS uid  FROM tbl_b WHERE ...
),
c AS (
	SELECT BITMAP_UNION(TO_BITMAP(user_id)) AS uid  FROM tbl_c WHERE ...
),
tmp AS (
	SELECT 'a' AS c_name, uid FROM a 
	UNION ALL 
	SELECT 'b' AS c_name, uid FROM b
	UNION ALL 
	SELECT 'c' AS c_name, uid FROM c
)
SELECT ORTHOGONAL_BITMAP_EXPR_CALCULATE_COUNT(uid,c_name,'a & b & c') AS total

如上使用WITH关键字的这种CTE语法,最后执行ORTHOGONAL_BITMAP_EXPR_CALCULATE_COUNT还会存在不正交的问题吗,我这边遇到使用ORTHOGONAL_BITMAP_EXPR_CALCULATE_COUNT和预期结果不一致。

1 Answers

ORTHOGONAL_BITMAP_EXPR_CALCULATE_COUNT(uid, c_name, 'a & b & c')
计算来自a、b、c三个不同子查询的bitmap的交集。如果这些子查询中的TO_BITMAP(user_id)操作产生的bitmap存在重叠,那么在执行ORTHOGONAL_BITMAP_EXPR_CALCULATE_COUNT时可能会出现不正交。

具体来说,如果以下情况成立,则可能出现问题:

  • 在tbl_a、tbl_b和tbl_c中,user_id不是完全唯一的,或者在不同表中有重叠。
  • 在进行BITMAP_UNION操作时,由于内部实现或数据分布的原因,未能正确处理重复的user_id。
  • 在使用UNION ALL合并来自a、b、c的查询结果时,由于某种原因(如类型转换、隐式转换等)导致bitmap数据被错误处理。

对于预期结果不一致的问题,建议检查以下方面:

  • 确保TO_BITMAP(user_id)转换后的bitmap数据是正确的,且每个user_id在各自的表中是唯一的。
  • 验证ORTHOGONAL_BITMAP_EXPR_CALCULATE_COUNT函数使用的表达式是否正确反映了您的业务逻辑。

如果可能,尝试将ORTHOGONAL_BITMAP_EXPR_CALCULATE_COUNT分解为多个步骤,以便在每一步都能检查bitmap的结果。