回覆列表
  • 1 # 大國師魂系列

    簡而言之,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。

  • 中秋節和大豐收的關聯?
  • 滴塑機手柄式控制器設定?