在配置单元中对单列和 select 多列进行分组

Group by on single column and select multiple columns in hive

我在 Hive table 中有数据,如下所示。

Table 1:

ID CODE VALUE  

1  XXXX 100  
2  AAAA 200
1  YYYY 300  
3  DDDD 300  
4  BBBB 200  
2  CCCC 300  
3  HHHH 200

我必须 select ID,来自 Table 1 的 VALUE 并加载到 Table 2.Since Table 1 有重复的 ID,我必须得到Table 1 中的唯一行基于 CODE 字段中的数据。

从 table 1 开始的 selection 行的顺序首先优先分配给 CCCC,然后是 XXXX,然后是 AAAA,依此类推。

我希望 Table 2 具有如下数据-

ID VALUE  
1   100
2   300  
3   300  
4   200

您可以在CASE 语句中定义优先级。为每个代码或代码列表分配优先级。在 CASE 中计算的优先级将用于在通过 row_number analityc 函数对行进行编号之前在 ID 分区内进行排序。具有相同 ID 和相同优先级的行将随机排序,因此最好尝试为所有代码定义优先级。看代码中的注释:

with your_data as ( --Use your table instead of this CTE
select stack(7,
1,'XXXX',100, 
2,'AAAA',200,
1,'YYYY',300, 
3,'DDDD',300, 
4,'BBBB',200, 
2,'CCCC',300, 
3,'HHHH',200
) as (ID,CODE,VALUE)
)

select ID, VALUE 
from
(
select ID,CODE,VALUE,
       row_number() over(partition by ID order by case when CODE='CCCC' then 1 --define priority here
                                                       when CODE='XXXX' then 2
                                                       when CODE='AAAA' then 3
                                                       when CODE='DDDD' then 4
                                                       when CODE='HHHH' then 5
                                                       --and so on... add more cases
                                                       else 99  --default priority
                                                    end) rn
  from your_data d
)s
where rn=1 --remove duplicates  
;

结果:

OK
1       100
2       300
3       300
4       200