2017-12-20 28 views
1

Oracle에서 Hive로 일부 데이터를 이동해야하며 Sqoop이 유용한 도구라는 것을 알았습니다. 문제는 쿼리를 처리하고 결과를 대상 데이터베이스의 테이블에 삽입해야한다는 것입니다.쿼리 절이있는 Sqoop

오라클 함수 결과 -> HiveDB.myTable

내가이 명령을 발견

sqoop import --connect jdbc:oracle:thin:@******:1522/** 
--username myUsername --password pwd --query '...' 
--hive-import --split-by "myID" --hive-table "hive-table" --hive-database "hive-database" 

을하지만 난 --target-dir 의무를 지정해야합니다 나는에 쓰기 권한이 없습니다 HDFS.

--table을 사용하면 --target-dir이 필요하지 않기 때문에 --query를 사용하는 경우에만 해당됩니다.

쿼리를 사용하여 "--target-dir" 속성을 피할 방법이 있는지 아는 사람이 있습니까?

+0

쿼리 옵션에 target-dir을 사용하는 것을 피할 수 없습니다. HDFS에서 쓸 수있는 권한이 없다고 말하면 테이블 옵션에서 target-dir을 무시하도록 선택한 경우 SQOOP은 HDFS에 기록되지만 기본 위치에 있기 때문에 사실 일 수 없습니다. 기본 위치는/user/hive/warehouse//<하이브 테이블 이름>입니다. 이 위치를 target-dir로 시도하십시오. 데이터가 거기에 쓰여질 것이라고 확신합니다. – Ramesh

+0

또 다른 옵션은 --target-dir이 필요없는 "--where"옵션을 사용하는 것입니다. 이 옵션은 단일 테이블에서 가져 오는 경우 작동합니다. –

+0

@Ramesh --target-dir/user/hive/warehouse/<하이브 데이터베이스>/<하이브 테이블 이름>을 지정하려고했으나/user/hive/warehouse 폴더에서 읽거나 쓸 수 없습니다. – gnobile

답변

0

하이브 테이블 이외의 hcatalog 테이블을 사용할 수 있지만 target-dir 위치를 지정해야합니다.

0

데이터를 가져 오려면 HDFS에 쓰기 권한이 있어야합니다. 대부분의 경우 hdfs : /// tmp/디렉토리는 모든 사용자에게 쓰기 액세스 권한을 갖습니다. 목표 디렉토리로 사용하고 명령을 실행하십시오.