1. 行转列
原始数据:sql
name | constellation | blood_type |
---|---|---|
孙悟空 | 白羊座 | A |
大海 | 射手座 | A |
宋宋 | 白羊座 | B |
猪八戒 | 白羊座 | A |
凤姐 | 射手座 | A |
如今须要把星座和血型同样的人归类到一块儿。结果以下:vim
射手座,A 大海|凤姐 白羊座,A 孙悟空|猪八戒 白羊座,B 宋宋
# vim person.txt 孙悟空,白羊座,A 大海,射手座,A 宋宋,白羊座,B 猪八戒,白羊座,A 凤姐,射手座,A # 建立hive表 hive> create table person_info( name string, constellation string, blood_type string) row format delimited fields terminated by ","; # 加载数据 hive> load data local inpath "/root/person.txt" into table person_info; # 转换sql hive> select t.base, concat_ws('|', collect_set(t.name)) from ( select name, concat(constellation, ",", blood_type) as base from person_info) t group by t.base; # 运行结果 射手座,A 大海|凤姐 白羊座,A 孙悟空|猪八戒 白羊座,B 宋宋
2. 列转行
原始数据:数组
movie | category |
---|---|
疑犯追踪 | 悬疑,动做,科幻,剧情 |
Lie to me | 悬疑,警匪,动做,心理,剧情 |
战狼 2 | 战争,动做,灾难 |
如今须要将电影分类中的数组数据展开。结果以下:bash
疑犯追踪 悬疑 疑犯追踪 动做 疑犯追踪 科幻 疑犯追踪 剧情 Lie to me 悬疑 Lie to me 警匪 Lie to me 动做 Lie to me 心理 Lie to me 剧情 战狼 2 战争 战狼 2 动做 战狼 2 灾难
vim movie_info.txt 疑犯追踪 悬疑,动做,科幻,剧情 Lie to me 悬疑,警匪,动做,心理,剧情 战狼2 战争,动做,灾难 # 建立hive 表 hive> create table movie_info( movie string, category array<string>) row format delimited fields terminated by "\t" collection items terminated by ","; # 加载数据 hive> load data local inpath "/root/movie_info.txt" into table movie_info; # 转换sql hive> select movie, category_name from movie_info lateral view explode(category) table_tmp as category_name; # 运行结果 疑犯追踪 悬疑 疑犯追踪 动做 疑犯追踪 科幻 疑犯追踪 剧情 Lie to me 悬疑 Lie to me 警匪 Lie to me 动做 Lie to me 心理 Lie to me 剧情 战狼2 战争 战狼2 动做 战狼2 灾难