복붙노트

[HADOOP] HIVE 중첩 ARRAY MAP 데이터 형식

HADOOP

HIVE 중첩 ARRAY MAP 데이터 형식

나는 다음과 같이 구조화 된 HIVE 테이블을 가지고있다.

Create table test_stg(employee_id INT, name STRING, abu ARRAY <String>, sabu MAP <String, ARRAY<INT>)
row format delimited fields terminated by '|'                                                              
collection items terminated by '/'                                                                         
map keys terminated by ':'; 

LOAD DATA LOCAL을 사용하여 로컬 파일 시스템에서 데이터를 가져옵니다.

문제는 Map 데이터 유형 필드 sabu가 중첩 배열을 가질 수 있도록 내 로컬 파일의 내용을 프레임해야하는 방법입니다.

미리 감사드립니다.

해결법

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

    1.하이브의 기본 구분 기호는 다음과 같습니다.

    하이브의 기본 구분 기호는 다음과 같습니다.

    이러한 구분 기호를 무시하면 구문 분석 중에 재정의 구분 기호가 사용됩니다. 분리 문자에 대한 앞의 설명은 복합 데이터 유형이 기본 유형 만 포함하는 일반적인 데이터 구조의 경우에 맞습니다. 중첩 된 유형의 경우 중첩 수준에 따라 구분 기호가 결정됩니다.

    예를 들어, 배열 배열의 경우, 외부 배열의 구분 기호는 Control-B ( '\ 002') 문자이지만, 내부 배열의 경우 Control-C ( '\ 003') 문자이고 다음 문자 구분 기호.

    Hive는 ASCII 코드 1, 2, ... 8에 해당하는 8 레벨의 구분자를 실제로 지원하지만 처음 세 개만 덮어 쓸 수 있습니다.

    지도 키 구분 기호가 '\ 003'( ':'로 대체)이므로 중첩 된 Map 데이터 유형 필드 sabu의 항목에 대한 구분 기호는 '\ 004'입니다.

    따라서 입력 파일을 다음 형식으로 작성할 수 있습니다.

    1|JOHN|abu1/abu2|key1:1'\004'2'\004'3/key2:6'\004'7'\004'8
    

    SELECT * FROM test_stg;의 출력; 될거야:

    1       JOHN     ["abu1","abu2"]     {"key1":[1,2,3],"key2":[6,7,8]}
    

    참조 : Hadoop The Definitive Guide - 12 장 : 하이브, 페이지 번호 : 433, 434

  2. ==============================

    2.나는 3 단계로 그렇게 쉬운 방법을 찾는다. "하둡 정식 가이드 - 12 장 : 하이브"

    나는 3 단계로 그렇게 쉬운 방법을 찾는다. "하둡 정식 가이드 - 12 장 : 하이브"

    그것이 당신이 필요로하는 것입니다. 그리고 네스트 레벨은 구분자가 무엇인지 결정합니다.

  3. from https://stackoverflow.com/questions/18812025/hive-nested-array-in-map-data-type by cc-by-sa and MIT license