Universe数据库中SAVING UNIQUE与SELECT DISTINCT结果差异问题
Universe两种查询结果差异解析及正确性判断
差异根源:多值字段的处理逻辑不同
SQL查询逻辑
执行SELECT DISTINCT INV_LOC_A FROM UNNEST INV ON LOCATIONS;时,UNNEST会把LOCATIONS关联段中的多值字段INV_LOC_A彻底展开,每个多值项单独成一行,之后DISTINCT对所有展开后的行做严格逐值去重。哪怕是带前后空格的相同内容、大小写不同的同文字段、甚至空值条目,都会被当作独立值保留,不会合并。Universe原生查询逻辑
SELECT INV SAVING UNIQUE INV_LOC_A用的是Universe对多值字段的原生去重规则:它会先在每个记录的多值集合内部去重,再汇总所有去重后的多值项。同时,Universe原生逻辑会自动忽略空的多值条目,还会把带空格的相同内容、大小写差异的同文字段视为同一个值合并,这就过滤掉了SQL查询中会被保留的“伪重复”值。
正确性判断
没有绝对的对错,取决于你的业务需求:
- 若需要精准统计所有实际存在的多值条目(包括空值、格式差异的条目),SQL查询得到的13729是准确的,它完整还原了多值字段的所有原始条目。
- 若业务上认为格式差异的相同值、空值属于无效重复,那么Universe原生查询的11697更符合业务逻辑,它剔除了业务无意义的重复项。
你可以抽取部分差异值做对比,比如检查是否存在空值、前后空格的相同内容、大小写差异的字段,就能快速确认差异的具体来源。
内容的提问来源于stack exchange,提问作者Charles
相关产品推荐
相关产品推荐

