1. 假设我们在hive中有两张表,其中一张表是存用户基本信息,另一张表是存用户的地址信息等,表数据假设如下:
user_basic_info:
id | name |
1 | a |
2 | b |
3 | c |
4 | d |
name | address |
a | add1 |
a | add2 |
b | add3 |
c | add4 |
d | add5 |
id | name | address |
1 | a | add1,add2 |
2 | b | add3 |
3 | c | add4 |
4 | d | add5 |
两个函数解释如下见:http://www.cnblogs.com/end/archive/2012/06/18/2553682.html
建表:
1 a add1,add2
2 b add3
3 c add4
4 d add5
2. 假设我们有一张表:
user_info:
id | name | address |
1 | a | add1,add2 |
2 | b | add3 |
3 | c | add4 |
4 | d | add5 |
id | name | address |
1 | a | add1 |
1 | a | add2 |
2 | b | add3 |
3 | c | add4 |
4 | d | add5 |
select explode(address) as address from user_info;
这样执行的结果只有address, 但是我们需要完整的信息:
select id, name, explode(address) as address from user_info;
这样做是不对的, UDTF‘s are not supported outside the SELECT clause, nor nested in expressions
所以我们需要这样做:
select id, name, add from user_info ui lateral view explode(ui.address) adtable as add;
结果为:
1 a add1
1 a add2
2 b add3
3 c add4
4 d add5
原文:http://blog.csdn.net/u010670689/article/details/44660009