列转行 简单练习

数据:

movie_info.txt
《疑犯追踪》	悬疑,动作,科幻,剧情
《Lie to me》	悬疑,警匪,动作,心理,剧情
《战狼2》	战争,动作,灾难

建表:

0: jdbc:hive2://hadoop:11240> create table movie_info(movie string,category array<string>)
. . . . . . . . . . . . . . > row format delimited fields terminated by '\t'
. . . . . . . . . . . . . . > collection items terminated by ',';
0: jdbc:hive2://hadoop:11240> load data local inpath "/home/xiaokang/hivedata/movie_info.txt"
. . . . . . . . . . . . . . > into table movie_info;
0: jdbc:hive2://hadoop:11240> select * from movie_info;
+-------------------+-----------------------------+
| movie_info.movie  |     movie_info.category     |
+-------------------+-----------------------------+
| 《疑犯追踪》            | ["悬疑","动作","科幻","剧情"]       |
| 《Lie to me》       | ["悬疑","警匪","动作","心理","剧情"]  |
| 《战狼2| ["战争","动作","灾难"]            |
+-------------------+-----------------------------+

需求:将电影分类中的数组数据展开
函数说明:
explode(col):将hive一列中复杂的array或者map结构拆分成多行

0: jdbc:hive2://hadoop:11240> select explode(category) from movie_info;
+------+
| col  |
+------+
| 悬疑   |
| 动作   |
| 科幻   |
| 剧情   |
| 悬疑   |
| 警匪   |
| 动作   |
| 心理   |
| 剧情   |
| 战争   |
| 动作   |
| 灾难   |
+------+

lateral view 侧写
用法:lateral view udtf(expression) tableAlias as columnAlias
解释:用于和 split, explode 等 udtf 一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合

查询:

0: jdbc:hive2://hadoop:11240> select movie,category_name
. . . . . . . . . . . . . . > from movie_info
. . . . . . . . . . . . . . > lateral view explode(category) table_tmp as category_name;
+--------------+----------------+
|    movie     | category_name  |
+--------------+----------------+
| 《疑犯追踪》       | 悬疑             |
| 《疑犯追踪》       | 动作             |
| 《疑犯追踪》       | 科幻             |
| 《疑犯追踪》       | 剧情             |
|Lie to me》  | 悬疑             |
|Lie to me》  | 警匪             |
|Lie to me》  | 动作             |
|Lie to me》  | 心理             |
|Lie to me》  | 剧情             |
| 《战狼2| 战争             |
| 《战狼2| 动作             |
| 《战狼2| 灾难             |
+--------------+----------------+
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘新鲜事儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值