在Hive中查找具有非零值的列

时间:2014-11-10 16:45:43

标签: sql apache hive

我们假设您有一个包含n列的数据库,从col1coln,其中n很大。

是否可以找到所有行,使colkcoln中的至少一列具有非零值(假设列为非负数,且数字可能丢失)?

2 个答案:

答案 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