2016-09-25 3 views
0

안녕하세요, 나는 업스트림에서 CSV 파일로 데이터를 가져와 그 위에 하이브 테이블을 만듭니다. 이제 일부 csv 파일에는 몇 개의 행/열에 제어 M 문자가 포함되어 있습니다. 예 : 3 열의 데이터하이브 테이블 행에서^M을 제거하는 방법은 무엇입니까?

abc^M,def,ghi 
jkl,mno^M,pqr 

이제 I 상기 데이터 이후 LOAD DATA INPATH '/path/to/file' INTO TABLE mytable를 이용한 하이브 테이블로 데이터를로드 제어 M의 문자 아래에 표시되어 있으므로 하이브 데이터 위에 새로운 라인에 행 M 하이브 개행 및 나누기로 간주 제어 포함 테이블은 2 대신 4 행 수를 반환합니다. regex_replace(mycol,'[\x01-\x1A]',"\\")을 사용하여 제어 문자 M을 포함한 모든 제어 문자를 대체하려고 시도했지만 작동하지만 예를 들어 \ 기호 뒤에 남습니다. abc^Mabc\이 될 것입니다. 데이터를 변경하고 싶지 않습니다. 더 좋은 방법이 있습니까? 이 경우 사용자 지정 serde조차 도움이 될지 잘 모르겠습니다. 안내해주십시오. 나는 하이브에게 새로운 사람이다. 미리 감사드립니다.

+0

왜'사용하지 regex_replace (mycol가 ' [\ x01- \ x1A] ',' ')' – Ambrish

답변

1

^M\으로 바꿔서 최종 결과에 표시되고 있습니다. 빈 문자열로 교체하십시오. 다음과 같이하십시오 :

반대쪽에는 먼저 파일을 정리 한 다음 HDFS로 업로드하는 것이 좋습니다.

^M을 원본 파일로 바꾸고 업로드하면 더 나은 결과를 얻을 수 있습니다.

샘플 코드 :

$ tr -d '\015' </path/to/file/file1> /tmp/file1 
$ LOAD DATA INPATH '/tmp/file1' INTO TABLE mytable 

파일에서 ^M을 제거 할 수있는 다른 방법이 있습니다

관련 문제