복붙노트

[HADOOP] 조건에 특정한 값을 증가시키는 방법?

HADOOP

조건에 특정한 값을 증가시키는 방법?

나는 아래와 같은 테이블을 가지고있다 :

itm    numbr
1        2
11       21
NULL     31
12       41
NULL     51
13       61

아래에 언급 된 것처럼 항목, 번호 및 추가 열로 출력하고 싶습니다.

   itm      numbr    incr
    1        2        1
    11       21       1
    NULL     31       2
    12       41       2
    NULL     51       3
    13       61       3

incr은 ITM이 NULL 인 경우에만 값을 증가시켜야하며, 그렇지 않으면 이전 값과 동일한 값을 표시해야합니다.

1. 나는 row_sequence로 시도했다

select itm,numbr,row_sequence() as incr from tablename;

그러나 1,2,3,4,5,6을 표시합니다.

2. 그런 다음 시도했다

select itm,numbr,case when itm=NULL then row_sequence()+1 else row_sequence() end as incr from table;

"FAILED : RuntimeException org.apache.hadoop.hive.ql.metadata.HiveException : CASE 내부에서 상태 저장 표현식을 사용할 수 없습니다."오류가 발생합니다.

조언 해주세요. 티아.

해결법

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

    1.incr 열의 값은 다른 행의 값에 따라 다르므로 테스트되지 않았지만 분석 기능이 도움이됩니다.

    incr 열의 값은 다른 행의 값에 따라 다르므로 테스트되지 않았지만 분석 기능이 도움이됩니다.

    WITH tmpincr as (
      SELECT 
          itm
        , nmbr
        -- get in tmpincr 1 for NULL, 0 for not null
        , if(isnull(itm), 1, 0) as tmpincr
       FROM tablename
    )
    SELECT 
        itm
      , nmbr
      -- get the sum of tmpincr for all rows before current one when ordered by itm
      , SUM(tmpincr) OVER (
          ORDER BY nmbr
          ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        ) as incr
      FROM tmpincr
      ORDER BY nmbr
    ;
    
  2. ==============================

    2.

    UPDATE table_name
    SET    incr = Coalesce(itm, 0) + 1
    

    이 솔루션을 시도하지 않았지만 null 인 경우 1을 추가하고 그렇지 않으면 증가합니다. 필요에 맞게 수정하십시오 =)

  3. from https://stackoverflow.com/questions/46904255/hive-how-to-increment-the-values-specific-to-condition by cc-by-sa and MIT license