一. 行转列
Hive中某表存放用户不同科目考试成绩,多行存放,看起来不美观,想要在一行中展示用户所有科目成绩,数据如下:
有多种方式,我将一一列举:
1.1 CASE WHEN/IF
最常见的就是 CASE WHEN 了,不过为了代码简洁我们使用 IF 函数,代码如下:
select uid
, max(if(subject = 'chn', score, null)) as chn
, max(if(subject = 'eng', score, null)) as eng
, max(if(subject = 'math', score, null)) as math
from (values (1, 'math', 87), (1, 'chn', 98), (1, 'eng', 85)) as t (uid, subject, score)
group by uid;
1.2 Get_Json_Object
可以将用户的所有成绩先聚合成一个大Json字符串,然后使用 get_json_onject 获取Json