복붙노트

[HADOOP] 하이브 - 값들의 범위 사이의 복수 행에 행을 분할

HADOOP

하이브 - 값들의 범위 사이의 복수 행에 행을 분할

나는 아래의 표를 가지고 시작부터 끝까지 컬럼의 범위에 의해 행을 분할하고 싶습니다.

즉 ID 및 값은 시작 및 끝 (두 값 모두 포함) 사이의 각 값에 대해 반복되어야

--------------------------------------
id      | value   | start     | end
--------------------------------------
1       | 5       | 1         | 4
2       | 8       | 5         | 9
--------------------------------------

원하는 출력

--------------------------------------
id      | value   | current
--------------------------------------
1       | 5       | 1
1       | 5       | 2
1       | 5       | 3
1       | 5       | 4

2       | 8       | 5
2       | 8       | 6
2       | 8       | 7
2       | 8       | 8
2       | 8       | 9
--------------------------------------

나는이 결과를 얻기 위해 자바 / Python으로 내 자신의 UDF를 작성할 수 있지만이 기존 하이브 UDF를 사용하여 하이브 SQL에서 구현할 수 있는지 확인하고 싶습니다

미리 감사드립니다.

해결법

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

    1.이것은 하이브가 지원하지 않는 재귀 공통 테이블 식으로 수행 할 수 있습니다.

    이것은 하이브가 지원하지 않는 재귀 공통 테이블 식으로 수행 할 수 있습니다.

    하나의 옵션은 숫자의 테이블을 만들고 시작과 끝 사이의 행을 생성하는 데 사용하는 것입니다.

    create table numbers
    location 'hdfs_location' as 
    select row_number() over(order by somecolumn) as num
    from some_table --this can be any table with the desired number of rows 
    ;
    
    --Join it with the existing table 
    select t.id,t.value,n.num as current
    from tbl t
    join numbers n on n.num>=t.start and n.num<=t.end
    
  2. from https://stackoverflow.com/questions/49961375/hive-split-a-row-into-multiple-rows-between-the-range-of-values by cc-by-sa and MIT license