복붙노트

[HADOOP] 하이브-구분 된 열을 여러 행으로 분할하고 위치를 기준으로 선택

HADOOP

하이브-구분 된 열을 여러 행으로 분할하고 위치를 기준으로 선택

쉼표로 구분 된 데이터를 기반으로 열을 분할하는 방법을 찾고 있습니다. 아래는 내 데이터 세트입니다

id  col1  col2
1   5,6   7,8

결과를 얻고 싶습니다

id col1 col2
1  5    7
1  6    8

그에 따라 결과를 가져와야하기 때문에 인덱스의 위치가 일치해야합니다.

아래 쿼리를 시도했지만 데카르트 제품을 반환합니다.

질문:

SELECT col3, col4
FROM test ext 
lateral VIEW explode(split(col1,'\002')) col1 AS col3
lateral VIEW explode(split(col2,'\002')) col2 AS col4

결과:

id col1 col2
1  5    7
1  5    8
1  6    7
1  6    8

해결법

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

    1.posexplode ()를 사용하여 분할 배열에 대한 위치 인덱스 열을 만들 수 있습니다. 그런 다음 위치 인덱스가 동일한 행만 선택하십시오.

    posexplode ()를 사용하여 분할 배열에 대한 위치 인덱스 열을 만들 수 있습니다. 그런 다음 위치 인덱스가 동일한 행만 선택하십시오.

    SELECT id, col3, col4
      FROM test
      lateral VIEW posexplode(split(col1,'\002')) col1 AS pos3, col3
      lateral VIEW posexplode(split(col2,'\002')) col2 AS pos4, col4
      WHERE pos3 = pos4;
    

    산출:

    id col3 col4
    1  5    7
    1  6    8
    

    참조 : Hive 언어 매뉴얼-posexplode ()

  2. from https://stackoverflow.com/questions/37585638/hive-split-delimited-columns-over-multiple-rows-select-based-on-position by cc-by-sa and MIT license