복붙노트

[HADOOP] 피벗 및 합계를 높이십시오.

HADOOP

피벗 및 합계를 높이십시오.

두 번째 열의 값을 기준으로 피벗 및 합계를 계산하는 표가 있습니다.

입력 예 :

|own|pet|qty|
|---|---|---|
|bob|dog| 2 |
|bob|dog| 3 |
|bob|dog| 1 |
|bob|cat| 1 |
|jon|dog| 1 |
|jon|cat| 1 |
|jon|cat| 1 |
|jon|cow| 4 |
|sam|dog| 3 |
|sam|cow| 1 |
|sam|cow| 2 |

예제 출력 :

|own|dog|cat|cow|
|---|---|---|---|
|bob| 6 | 1 |   |
|jon| 1 | 2 | 4 |
|sam| 1 |   | 3 |

해결법

  1. ==============================

    1.동적 데이터의 경우 MAP를 사용할 수 있습니다.

    동적 데이터의 경우 MAP를 사용할 수 있습니다.

    select      own
               ,str_to_map(concat_ws(',',collect_list(concat(pet,':',cast(qty as string))))) as pet_qty
    
    from       (select      own,pet
                           ,sum(qty) qty 
    
                from        mytable
    
                group by    own,pet
                ) t
    
    group by    own
    ;
    
    +-----+---------------------------------+
    | own |             pet_qty             |
    +-----+---------------------------------+
    | bob | {"cat":"1","dog":"6"}           |
    | jon | {"cat":"2","cow":"4","dog":"1"} |
    | sam | {"cow":"3","dog":"3"}           |
    +-----+---------------------------------+
    
  2. ==============================

    2.사용 사례 및 sum () :

    사용 사례 및 sum () :

    select own, sum(case when pet='dog' then qty end) as dog,
                sum(case when pet='cat' then qty end) as cat,
                sum(case when pet='cow' then qty end) as cow
      from your_table
     group by own;
    
  3. from https://stackoverflow.com/questions/44770037/hive-pivot-and-sum by cc-by-sa and MIT license