복붙노트

[HADOOP] 변환 하이브를 매핑 할 문자열

HADOOP

변환 하이브를 매핑 할 문자열

나는 4 개의 기둥을 가진 테이블을 가지고있다.

C1    C2    C3    C4
--------------------
x1    y1    z1    d1
x2    y2    z2    d2

이제는 키와 값 쌍이있는 맵 데이터 유형으로 변환하고 별도의 테이블에로드하려고합니다.

create table test
(
   level map<string,string>
)
row format delimited
COLLECTION ITEMS TERMINATED BY '&'
map keys terminated by '=';

이제 SQL 아래에서 데이터를로드하는 중입니다.

insert overwrite table test
select str_to_map(concat('level1=',c1,'&','level2=',c2,'&','level3=',c3,'&','level4=',c4) from input;

테이블에서 쿼리를 선택하십시오.

select * from test;
{"level1":"x1","level2":"y1","level3":"z1","level4":"d1=\\"}
{"level1":"x2","level2":"y2","level3":"z2","level4":"d2=\\"}

나는 왜 내가 마지막 값으로 여분의 "= \ \"을 얻는 지 알지 못했다.

나는 데이터를 다시 확인하지만 문제는 지속됩니다.

좀 도와 줄 수있어?

해결법

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

    1.str_to_map (text, delimiter1, delimiter2) - 텍스트를 파싱하여지도를 만듭니다. 두 구분자를 사용하여 텍스트를 키 - 값 쌍으로 분리하십시오. 첫 번째 구분 기호는 쌍을 구분하고 두 번째 구분 기호는 키와 값을 구분합니다. 매개 변수가 하나만 주어지면 기본 구분 기호가 사용됩니다. ','는 구분 기호 1로, '='는 구분 기호 2로 사용됩니다.

    str_to_map (text, delimiter1, delimiter2) - 텍스트를 파싱하여지도를 만듭니다. 두 구분자를 사용하여 텍스트를 키 - 값 쌍으로 분리하십시오. 첫 번째 구분 기호는 쌍을 구분하고 두 번째 구분 기호는 키와 값을 구분합니다. 매개 변수가 하나만 주어지면 기본 구분 기호가 사용됩니다. ','는 구분 기호 1로, '='는 구분 기호 2로 사용됩니다.

    다음 명령을 실행하여이 정보를 얻을 수 있습니다.

    describe function extended str_to_map
    

    구문에는 두 가지 오류가 있습니다.

    insert overwrite table test
    select str_to_map(concat('level1=',c1,'&','level2=',c2,'&','level3=',c3,'&','level4=',c4) from input;
    

    첫째, 하나의 괄호)가 누락되었습니다.

    둘째, 기본적으로 오류가 아니라 구분 기호를 지정하지 않아서 함수가 구분 기호에 대한 기본값을 사용하므로 결과에 ','가 표시됩니다.

    현재 형식으로 출력을 얻으려면 다음 쿼리를 시도해야합니다.

    insert overwrite table test
    select str_to_map(concat('level1=',c1,'&','level2=',c2,'&','level3=',c3,'&','level4=',c4),'&','=') from input;
    
  2. from https://stackoverflow.com/questions/23023068/string-to-map-conversion-hive by cc-by-sa and MIT license