Hive中數組的使用

基本操作

  • 創建文本
$>cat test.txt
  • 輸入文本數據
12,23,23,34    what,are,this
34,45,34,23,12    who,am,i,are
  • 打開Hive,創建表
hive> create table t_afan_test
    > (
    > info1 array<int>,
    > info2 array<string>
    > )
    > ROW FORMAT DELIMITED
    > FIELDS TERMINATED BY '\t'
    > COLLECTION ITEMS TERMINATED BY ','
    > ;
  • load數據
hive> LOAD DATA LOCAL INPATH 'test.txt' OVERWRITE INTO TABLE t_afan_test;
  • 執行查詢命令
hive> select * from t_afan_test;
OK
[12,23,23,34]    ["what","are","this"]
[34,45,34,23,12]    ["who","am","i","are"]
Time taken: 0.429 seconds

hive> select size(info1), size(info2) from t_afan_test;
OK
4    3
5    4
Time taken: 20.171 seconds

hive> select info1[2], info2[0] from t_afan_test;
23    what
34    who
Time taken: 10.88 seconds

hive size計算數組長度的一個坑

hive上有個表,其中某列p_9的數據格式是用逗號分隔的字符串。通過下面的方式計算p_9列使用逗號分隔後元素的長度。
select rg,sum(size(split(p_9,","))) from ttengine_api_data where dt='2017-08-07' group by rg;  
OK  
0   137683  
1   150155 
如果p_9列不爲空,那麼計算是沒問題的。如果是空(“”或者null),則計算後是有問題的。仔細查了一下,發現是size(split(p_9,",")) 有問題,即:
如果p_9是空或者null,那麼split成數組後,在計算數據的長度居然是1.知道了原因,那麼改起來很簡單,使用下面的方式統計就沒問題了:
select rg,sum(if(length(p_9)==0,0,size(split(p_9,",")))) from ttengine_api_data where dt='2017-08-07' group by rg;  
OK  
0   0  
1   6373 
發佈了14 篇原創文章 · 獲贊 13 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章