我们假设您有一个包含n
列的数据库,从col1
到coln
,其中n
很大。
是否可以找到所有行,使colk
到coln
中的至少一列具有非零值(假设列为非负数,且数字可能丢失)?
答案 0 :(得分:1)
您可以使用Hive的coalesce函数(它将一系列列输入的第一个非null值)与if语句结合使用,如:
select *
from table
where coalesce(if(col1 > 0, 1, null), if(col2 > 0, 1, null)...) = 1
;
上面将返回任何行,其中coalesce函数中指定的至少一列返回值1.让我知道这是否适合您。
编辑:另一种更清洁的方法(不要求您列出所有列)但灵活性较低:
select *
from table tb
where sort_array(array(tb.*))[n-1] > 0
;
上面将对数组进行升序排序,以便您可以检查数组中的最大值是否大于零,并仅返回这些行。
答案 1 :(得分:0)
为什么这么多复杂的查询都会使用它;
INSERT INTO DB.1.table_name_1 SELECT * FROM DB.2_table_name_2 表格_1.COL_NAME> 0
INSERT OVERWRITE DB.1.table_name_1 SELECT * FROM DB.2_table_name_2 表格_1.COL_NAME> 0