2017-10-30 8 views
0

하이브 테이블에서 데이터를 내 보냈습니다. 그런 다음 해당 파일을 읽을 다른 테이블을 만들었습니다. 내 하이브 소스 테이블에 [ '9x3', '970x66', '728x90', '970x90', '970x250', '980x300', '1200x300', '970x418']와 같은 배열 필드가 있습니다. 내 타겟 외부 하이브 테이블도 동일하게 보일 필요가 있습니다. 데이터를 내보낼 때 배열 필드에 '[]'이 예상대로 있습니다. 그러나 대상 필드도 배열이므로 '[]'이 (가) 추가됩니다. 나는에 의해 이스케이프 된을 사용했지만 '['와 ']'문자를 모두 이스케이프 할 수있는 방법을 찾지 못했습니다.HIVE ESCAPED BY

ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY '\t' ESCAPED BY '[' 
    COLLECTION ITEMS TERMINATED BY '\,' 
    MAP KEYS TERMINATED BY ':' 

과 같은

모두 첫 번째 문자를 탈출하는 것
ESCAPED BY '[]', 
ESCAPED BY '[|]', 
ESCAPED BY '[,]' 

등의 여러 버전을 시도 : 내가 사용하고 있습니다. 여러 문자를 이스케이프 처리하거나 '[]'characters.regexp_replace 및 translate 함수를 사용하지 않고 배열 필드를 내보내는 방법이 있습니까? 감사

광원 어레이
[ '에서 970x66', '728x90 크기', '970x90 크기', '970x250 크기', '980x300', '1200x300', '970x418에서'] 배열 타겟팅 필요

[ '에서 970x66을 ''728x90 크기 ','970x90 크기 ','970x250 크기 ','980x300 ','1200x300 ','970x418에서 ']

하지만 탈출 [없이 보이는'[ '에서 970x66', '728x90 크기', '970x90 크기' '970x250', '980x300', '1200x300', '970x418'] ']

답변

0

concat_ws(string delimiter, array<string>)을 사용하면 배열을 문자열로 변환하고대신 내보낼 수 있습니다

ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
COLLECTION ITEMS TERMINATED BY '\,' 
MAP KEYS TERMINATED BY ':' 
SELECT 
     rest_of_columns, 
     concat_ws(',',collect_set(cast(arrayfieldname) as string)) as array_field 
FROM 
     yourtable;