2017-02-20 2 views
1

Es ist möglich, die Summe aller Spalten in der Hive-Tabelle zu nehmen. Ich meine, jede einzelne Art und Weise SummeSo nehmen Sie die Summe aller Spalten im Stock

Tabelle col col_1 col_2 col_3

ouptut Summe (col), Summe (col_1), sum (col_2) Summe (col_3)

+0

Die Frage ist nicht klar –

+0

Ich brauche alle Spalten einzeln zu nehmen Summe aus, anstatt jedes Mal Summe des Schreibens (col), sum (col_1) – user2672739

+0

Was ist das Problem mit nur schreiben? Brauchen Sie es für 1000 Tische? Was machst du mit den Ergebnissen? –

Antwort

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

nehmen
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 | 
+-----+---------+ 

Oder (helfen So wahr mir Gott)

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"] | 
+------------------+ 
Verwandte Themen