복붙노트

[HADOOP] 어떻게 그룹에 여러 컬럼에 의해 다음 하이브에서 트랜스

HADOOP

어떻게 그룹에 여러 컬럼에 의해 다음 하이브에서 트랜스

내가 여러 열에 의해 그룹화 할 일부 데이터를 가지고에 집계 함수를 수행 한 다음 하이브를 사용하여 다른 열로 바꾸어.

예를 들어, 입력이 주어

hr  type value
01  a    10
01  b    20
01  c    50
01  a    30
02  c    10
02  b    90
02  a    80

나는이 출력을 생성하려면 :

hr  a_avg  b_avg  c_avg
01  20     20     50
02  80     90     10

어디에 입력의 각 구별 유형에 대해 하나의 고유 한 열이 있습니다. a_avg 평균 각 시간에 대한 값에 대응한다.

어떻게 하이브에서이 작업을 수행 할 수 있습니다? 나는 https://github.com/klout/brickhouse/wiki/Collect-UDFs의 사용을해야 할 수도 있습니다 추측하고있다

지금까지 내가 생각할 수있는 최선의 여러 그룹에 의해 절을 사용하는 것입니다,하지만 여러 컬럼에 데이터를 전치하지 않습니다.

어떤 아이디어?

해결법

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

    1.당신은 반드시 Brickhouse를 사용할 필요가 없습니다,하지만 확실히 더 쉽게 만들 것입니다. 여기에 내가 뭔가를 생각하고 무엇을

    당신은 반드시 Brickhouse를 사용할 필요가 없습니다,하지만 확실히 더 쉽게 만들 것입니다. 여기에 내가 뭔가를 생각하고 무엇을

    select hr
      , type_map['a'] a_avg
      , type_map['b'] b_avg
      , type_map['c'] c_avg
    from (
      select hr
        , collect(type, avg_value) type_map -- Brickhouse collect; creates a map
      from (
        select hr
          , type
          , avg( value ) avg_value
        from db.table
        group by hr, type ) x
      group by hr ) y
    
  2. from https://stackoverflow.com/questions/30109551/how-to-group-by-multiple-columns-and-then-transpose-in-hive by cc-by-sa and MIT license