2017-01-27 10 views
0

우리는 Netezza direct를 사용하여 POC의 일부로 Netezza에서 Hadoop으로 데이터를 가져옵니다.Sqoop Direct 가져 오기 Netezza 테이블 권한

Netezza 및 Netezza Sqoop 통합에 대한 몇 가지 질문이 있습니다.

Q1. Sqoop 직접 모드는 직접 전송을 수행하기 위해 항상 CREATE EXTERNAL TABLE 및 DROP 권한이 필요합니까?

2. 외부 테이블이 Netezza에서 생성됩니까? 그렇다면 어떤 데이터베이스입니까? 아래 쿼리를 사용하여 Sqoop을 볼 수 있습니다 :

CREATE EXTERNAL TABLE '/yarn/local/usercache/someuser/appcache/application_1483624176418_42787/work/task_1483624176418_42787_m_000000/nzexttable-0.txt' 
USING (REMOTESOURCE 'JDBC' 
BOOLSTYLE 'T_F' 
CRINSTRING FALSE DELIMITER 44 ENCODING 
'internal' FORMAT 'Text' INCLUDEZEROSECONDS TRUE 
NULLVALUE 'null' MAXERRORS 1) 
AS SELECT * FROM SOME_TBL WHERE (DATASLICEID % 3) 

db URL에서 선택한 데이터베이스에서 생성합니까? jdbc : netezza : // somehostname : 5480/SOME_DB_1

Q3. Netezza가 외부 테이블을 생성해야하는 경우 Hadoop으로 가져와야하는 데이터가있는 실제 테이블과 다른 데이터베이스에 외부 테이블을 생성 할 수 있습니다. 수행해야 할 설정 변경은 무엇입니까?

4. Sqoop은 개별 매퍼가 만든 외부 테이블에서 DROP 테이블을 실행합니까? 사용

Sqoop을 명령 :

export HADOOP_CLASSPATH=/opt/nz/lib/nzjdbc3.jar 
sqoop import -D mapreduce.job.queuename=some_queue 
-D yarn.nodemanager.local-dirs=/tmp -D mapreduce.map.log.level=DEBUG 
--direct --connect jdbc:netezza://somehost:5480/SOME_DB --table SOME_TBL_1 
--username SOMEUSER --password xxxxxxx --target-dir /tmp/netezza/some_tbl_file 
--num-mappers 2 --verbose 

답변

0

이것은 내가 Sqoop을 사용자 커뮤니티 (감사 사볼 Vasas)에 대한 응답으로 가지고 것입니다.

Netezza 직접 가져 오기의 경우 Sqoop은 테이블의 내용을 임시 파일로 백업하기 위해 CREATE EXTERNAL TABLE 명령을 실행하므로 (CREATE EXTERNAL TABLE 권한이 필요합니다)이 파일의 내용을 복사합니다 HDFS의 최종 출력 전자 메일에 붙여 넣은 SQL 명령은 실제로 Sqoop에 의해 실행되는 명령이지만 Netezza 설명서 (http://www.ibm.com/support/knowledgecenter/SSULQD_7.2.1/com.ibm.nz.load.doc/c_load_create_external_tbl_expls.html, 6 번째 예)에서 알 수있는 한 실제로 백업하는 스키마에는 새 외부 테이블이 실제로 생성되지 않습니다 테이블의 내용과 그 때문에 DROP TABLE 문이 실행되지 않습니다.

Q1. 예, Sqoop은 CREATE EXTERNAL TABLE은 필요하지만 DROP 권한은 필요 없습니다.

2. Sqoop은 실제로 테이블의 내용을 백업하는 스키마에 새로운 외부 테이블을 생성하지 않습니다 (http://www.ibm.com/support/knowledgecenter/SSULQD_7.2.1/com.ibm.nz.load.doc/c_load_create_external_tbl_expls.html, 여섯 번째 예).

3. 특정 스키마에서 EXTERNAL 테이블을 작성할 수 없습니다.

4. 아니요, Sqoop은 DROP 명령을 실행하지 않습니다.

또한 sqoop 직접 처리로 생성 된 테이블은 Netezza TET - Transient external tables입니다. 따라서 매퍼가 NamedFifo로 데이터를 받으면 외부 원격 소스 JDBC 테이블이 삭제됩니다. 따라서 테이블은 전송 후 Netezza에 저장되지 않습니다.