Cloudera Hue中两表计数与差异观测查询结果不符问题排查
问题成因与潜在特殊情况分析
核心原因是**customer||date无法唯一标识单条记录,或存在SQL特殊值导致匹配逻辑失效**,具体分以下几种场景:
1. NULL值导致匹配失效
当customer或date字段为NULL时,customer||date的结果为NULL,而SQL中NULL = NULL的判断结果为不成立:
- 若表A中有2条
customer||date为NULL的记录,因不满足内连接条件未进入表B;同时表B中另有2条记录的customer||date为NULL(比如关联表字段为NULL导致拼接结果为NULL) - 此时
count(customer||date)统计的是非NULL行数,表A为1004,表B为1002(差值2);但全外连接时,两边的NULL值无法相互匹配,会返回2条T1有NULL、T2无匹配的记录,加上2条T2有NULL、T1无匹配的记录,总共4条差异结果。
2. customer||date存在重复的拼接值
不同原始记录拼接后得到相同的customer||date值,或表B的customer/date取自关联表而非表A:
- 比如表A中有2条记录,拼接值为
X且未进入表B;表B中有2条记录,拼接值也为X但来自关联表字段,对应的表A原始记录拼接值并非X - 此时表A的
count(customer||date)比表B多2,全外连接时两边的X无法匹配,返回4条差异结果。
3. 内连接导致表B出现重复记录,同时表A有记录被过滤
表A单条记录因关联表有重复匹配,在表B中生成多条相同customer||date的记录,同时表A有其他记录被过滤:
- 例如表A中有1条记录,内连接后在表B生成2条相同拼接值的记录;同时表A中有3条记录未进入表B,此时总count差为(1+3)-2=2
- 全外连接时,表A的3条未进入记录返回3条,表B的2条重复记录中1条匹配成功、1条无匹配,总共返回4条差异结果。
内容的提问来源于stack exchange,提问作者Filip
相关产品推荐
相关产品推荐

