2017-01-27 8 views
0

mysql의 각 테이블에 100000 개가 넘는 레코드가있는 1000 개의 테이블이 있습니다. 테이블의 컬럼은 300-500입니다.Sqoop 가져 오기 mysql의 특수 문자 대체

일부 테이블에는 열 이름에. (점) 및 공백과 같은 특수 문자가있는 열이 있습니다. 나는 테이블을 쿼리 할 때 하이브 테이블이 생성이 있지만, 후

sqoop import --connect ${domain}:${port}/$(database) --username ${username} --password ${password}\ 
--table $(table) -m 1 --hive-import --hive-database ${hivedatabase} --hive-table $(table) --create-hive-table\ 
--target-dir /user/hive/warehouse/${hivedatabase}.db/$(table) 

그것이

같은 오류를 보여줍니다 아래

는 지금은 Sqoop을 가져 오기를하고 같은 싱글 샷 쿼리에 HDFS에서 하이브 테이블을 만들려면

이 오류 출력은 샘플 출력입니다. Sqoop을 가져 오기 자체를하는 동안 우리는 _ (밑줄)로. (점)을 대체 할 수있는 방법

Error while compiling statement: FAILED: RuntimeException java.lang.RuntimeException: cannot find field emp from [0:emp.id, 1:emp.name, 2:emp.salary, 3:emp.dno] 

. 나는 이것을 동적으로하고 싶다.

답변

1

- sqlop 가져 오기 \ --query 옵션을 --table 대신 사용하고 쿼리에서 replace 기능을 사용하십시오.

Sqoop을 수입 --connect의 $ {도메인} : $ {포트}/$ (데이터베이스) --username $ {사용자 이름} --password $ {암호} \ - 쿼리 'COL1를 선택 , (col2, '.', '_')를 표의 col로 대체하십시오.

또는 (권장하지 않음) "."을 찾고 바꿀 수있는 쉘 스크립트를 작성하십시오. (grep 명령) /user/hive/warehouse/${hivedatabase}.db/$(table)

+0

--Query 옵션을 시도했지만 선택 쿼리를 사용하여 많은 열 이름을 바꿀 수 있습니다. 오전 – User12345

+0

동적 쿼리를 작성하여 쿼리를 생성하십시오. –

+0

질문할만한 질문이 있습니다. 하둡에 조금 익숙합니다. 동적 쿼리를 작성하는 방법 – User12345