选择具有空列的不重复行,但当空列不属于重复行时不选择

时间:2018-11-14 22:00:46

标签: hive hiveql

使用Hive,我有重复的行,并且当特定列为空时,我想删除重复的行(选择具有非空列的不同行)。但是我想在列为空但不重复的时候保留行。

例如输入为

id | name | fathername | address
 1 | bob  | john       | street1
 1 | bob  | john       | 
 2 | amir | khan       |
 3 | roby | johanson   | street3

输出

id | name | fathername | address
 1 | bob  | john       | street1
 2 | amir | khan       |
 3 | roby | johanson   | street3

当地址为空时,我们删除了ID为1的行,因为它是重复的行。尽管缺少ID 2的地址,但我们仍要保留该行,因为它不是重复的行。我需要蜂巢。实际问题中有很多列,而解决方案则需要选择*而不是特定的列。

2 个答案:

答案 0 :(得分:0)

您可以将// Change Default Image Editor Library Used by WordPress function xyz_image_editor_default_to_gd( $editors ) { $gd_editor = 'WP_Image_Editor_GD'; $editors = array_diff( $editors, array( $gd_editor ) ); array_unshift( $editors, $gd_editor ); return $editors; } add_filter( 'wp_image_editors', 'xyz_image_editor_default_to_gd' ); GROUP BY一起使用:

MAX

或者如果您想使用select id, name, fathername, max(address) from data group by id, name, fathername

select *

答案 1 :(得分:0)

您可以使用order byrow_number中的非空地址行进行优先级排序。

select *
from (select t.*
      ,row_number() over(partition by id order by case when address is not null then 1 else 2 end) as rnum
      from tbl t
     ) t
where rnum = 1

注意:如果存在多于一个非空行,则可能必须指定一列或多列来打破关系。