1. lateral view explode:将array或map类型的列拆分成多行数据
lateral view:把拆分的单个字段数据与原始表的数据关联上
LATERAL VIEW EXPLODE(col) table_temp AS col_name
table_temp 是因为 LATERAL VIEW UDTF 函数在执行时,会生成一个临时的虚拟表。
同时生成的列也需要列名col_name。
- lateral view的位置在from后where前;from后面可以带多个lateral view
eg.如何把table1变成table2
name | sports |
---|---|
小张,小王 | 足球,篮球 |
小李,小丁 | 游泳,跳舞 |
name | sports |
---|---|
小张 | 足球 |
小张 | 篮球 |
小王 | 足球 |
小王 | 篮球 |
小李 | 游泳 |
小李 | 跳舞 |
小丁 | 游泳 |
小丁 | 跳舞 |
SELECT name_exploded AS name, sports_exploded AS sports
FROM table1
LATERAL VIEW EXPLODE(SPLIT(name, ',')) name_table AS name_exploded
LATERAL VIEW EXPLODE(SPLIT(sports, ',')) sports_table AS sports_exploded;
2. ROWS BETWEEN & RANGE BETWEEN
transdt | end_time | trasaction_id | ||
---|---|---|---|---|
15:00 | 15:30 | 1 | ||
15:10 | 15:40 | 2 | ||
15:25 | 15:55 | 3 | ||
15:35 | 16:05 | 4 | ||
15:40 | 16:10 | 5 |