簡而言之,sql中expoler函式的作用就是拓展和探索相關內容,假如有這麼一組型別的資料:
id,name,course
1,xiaoming,數學:語文:生物:化學
2,lilei,化學:地理:物理:語文
3,hanmeimei,資料結構:作業系統:計組
我們要把他放到hive表中做相應的操作,course顯然需要array<string>型別
即:
create table t_xuanxiu(uid string,name string,kc array<string>)row format delimitedfields terminated by ","collection items terminated by ":";
那麼explore()函式到底有啥作用呢?我們可以使用這個函式將一組陣列的資料變成一列表
例如select explode(kc) from t_xuanxiu where uid=1;結果如下:
col
數學語文英語生物
lateral view 表生成函式,可以將explode的資料生成一個列表
select uid,name,tmp.* from t_xuanxiu lateral view explode(kc) tmp as course;結果如下:
1,xiaoming,數學1,xiaoming,語文1,xiaoming,生物1,xiaoming,英語2,lilei,化學2,lilei,地理2,lilei,物理2,lilei,語文3,hanmeimei,資料結構3,hanmeimei,作業系統3,hanmeimei,計組
這樣我們就可以按照這個表做相應的操作了。
場景2:如果我們對一組單詞進行統計出現次數
a b c d e f ga b ce f g ab c d b
create table t_juzi(line string) row format delimited;
load data local inpath "/root/words.txt" into table t_juzi;
(select tmp.* from t_juzi lateral view explode(split(line," ")) tmp as word) 這句的效果就是產生一列資料的表,每一行一個單詞,接下來我們只要透過這個表做個分組聚合即可
select a.word,count(1) cntfrom (select tmp.* from t_juzi lateral view explode(split(line," ")) tmp as word) agroup by a.wordorder by cnt desc。
簡而言之,sql中expoler函式的作用就是拓展和探索相關內容,假如有這麼一組型別的資料:
id,name,course
1,xiaoming,數學:語文:生物:化學
2,lilei,化學:地理:物理:語文
3,hanmeimei,資料結構:作業系統:計組
我們要把他放到hive表中做相應的操作,course顯然需要array<string>型別
即:
create table t_xuanxiu(uid string,name string,kc array<string>)row format delimitedfields terminated by ","collection items terminated by ":";
那麼explore()函式到底有啥作用呢?我們可以使用這個函式將一組陣列的資料變成一列表
例如select explode(kc) from t_xuanxiu where uid=1;結果如下:
col
數學語文英語生物
lateral view 表生成函式,可以將explode的資料生成一個列表
select uid,name,tmp.* from t_xuanxiu lateral view explode(kc) tmp as course;結果如下:
1,xiaoming,數學1,xiaoming,語文1,xiaoming,生物1,xiaoming,英語2,lilei,化學2,lilei,地理2,lilei,物理2,lilei,語文3,hanmeimei,資料結構3,hanmeimei,作業系統3,hanmeimei,計組
這樣我們就可以按照這個表做相應的操作了。
場景2:如果我們對一組單詞進行統計出現次數
a b c d e f ga b ce f g ab c d b
create table t_juzi(line string) row format delimited;
load data local inpath "/root/words.txt" into table t_juzi;
(select tmp.* from t_juzi lateral view explode(split(line," ")) tmp as word) 這句的效果就是產生一列資料的表,每一行一個單詞,接下來我們只要透過這個表做個分組聚合即可
select a.word,count(1) cntfrom (select tmp.* from t_juzi lateral view explode(split(line," ")) tmp as word) agroup by a.wordorder by cnt desc。