2017-02-20 9 views
1

ハイブテーブルのすべての列の合計をとることは可能です。私は合計ハイブのすべての列の合計を取る方法

表 COL COL_1 col_2 col_3

Ouptut 合計(COL)、合計(COL_1)、合計(col_2)合計(col_3)

+0

問題は、私は、単一の方法で、すべての列をオフ和の代わりに、それぞれの時間の和(COL)を書いて、合計(COL_1取る必要 –

+0

明確ではありません) – user2672739

+0

それを書いているだけで何が問題になっていますか?あなたは1000のテーブルのためにそれを必要としますか?結果はどうしていますか? –

答えて

2
create table mytable (i int,j int,k int); 
insert into mytable values (1,2,3),(4,5,6),(7,8,9); 

を取るために、任意の単一の方法を意味します
select  pos+1  as col 
      ,sum (val) as sum_col 

from  mytable t 
      lateral view posexplode(array(*)) pe 

group by pos 
; 

+-----+---------+ 
| col | sum_col | 
+-----+---------+ 
| 1 |  12 | 
| 2 |  15 | 
| 3 |  18 | 
+-----+---------+ 

または(だから、神は私を助けて)

select  map_values 
      (
       str_to_map 
       (
        concat_ws 
        (
         ',' 
         ,sort_array 
         (
          collect_list 
          (
           concat_ws 
           (
            ':' 
            ,lpad(cast(pos as string),10,'0') 
            ,cast(sum_val as string) 
           ) 
          ) 
         ) 
        ) 
       ) 
      )  as sum_col_array 

from  (select  pos 
         ,sum (val) as sum_val 

      from  mytable t 
         lateral view posexplode(array(*)) pe 

      group by pos 
      ) t 
; 

+------------------+ 
| sum_col_array | 
+------------------+ 
| ["12","15","18"] | 
+------------------+ 
関連する問題