Impala查询中乘法计算部分行返回NULL问题求助
Impala数值乘法出现NULL值问题
我在Impala中执行数值乘法运算时,部分行计算结果正常,但其他行返回NULL值,希望所有行都能正确完成乘法计算。
我的查询语句如下:
SELECT a.bom_number ,a.plant ,a.component_assembly_bom_material_number ,a.bom_component_material_number ,a.level ,a.Assembly_Flag ,a.level_1_inclusion ,a.level_2_inclusion ,a.level_3_inclusion ,a.level_4_inclusion ,a.level_5_inclusion ,a.level_6_inclusion ,a.level_7_inclusion ,a.level_8_inclusion ,a.level_9_inclusion ,a.level_10_inclusion ,coalesce( a.level_1_inclusion * a.level_2_inclusion * a.level_4_inclusion * a.level_5_inclusion * a.level_6_inclusion * a.level_7_inclusion * a.level_8_inclusion * a.level_9_inclusion * a.level_10_inclusion ,1) Final FROM tmp_levels a
当前输出情况:部分行的Final列能得到正确的乘积结果,但有部分行的Final列显示为NULL。
问题原因
Impala中只要乘法表达式里有一个值为NULL,整个乘法运算的结果就会变成NULL。当前的coalesce是在所有乘法完成后才处理,但如果任意一个level_*_inclusion字段为NULL,乘法结果已经是NULL,此时coalesce仅会返回1,这不符合“所有数值正确相乘”的需求——需要将NULL字段当作1参与乘法,而非最后替换整个结果为1。
解决方法
给每个参与乘法的level_*_inclusion字段单独用coalesce替换NULL为1,这样即使某个字段为NULL,乘以1也不会影响最终乘积结果,同时避免整个乘法表达式返回NULL。
修改后的查询语句:
SELECT a.bom_number ,a.plant ,a.component_assembly_bom_material_number ,a.bom_component_material_number ,a.level ,a.Assembly_Flag ,a.level_1_inclusion ,a.level_2_inclusion ,a.level_3_inclusion ,a.level_4_inclusion ,a.level_5_inclusion ,a.level_6_inclusion ,a.level_7_inclusion ,a.level_8_inclusion ,a.level_9_inclusion ,a.level_10_inclusion ,coalesce(a.level_1_inclusion, 1) * coalesce(a.level_2_inclusion, 1) * coalesce(a.level_4_inclusion, 1) * coalesce(a.level_5_inclusion, 1) * coalesce(a.level_6_inclusion, 1) * coalesce(a.level_7_inclusion, 1) * coalesce(a.level_8_inclusion, 1) * coalesce(a.level_9_inclusion, 1) * coalesce(a.level_10_inclusion, 1) Final FROM tmp_levels a
这样所有字段都会被当作有效数值参与乘法,不会出现NULL结果。
内容的提问来源于stack exchange,提问作者Asim Khan
相关产品推荐
相关产品推荐

