sqoop直接导入netezza表权限

kh212irz  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(334)

我们使用netezza direct将数据从netezza导入hadoop,作为poc的一部分。
有几个关于netezza特定和netezza sqoop集成的问题。
问题1。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
问题3。如果netezza需要创建外部表,那么它是否可以在不同的数据库中创建外部表,而不是在需要将包含数据的实际表拉入hadoop的数据库中创建外部表。需要做什么配置更改?
第四季度。sqoop是否在由单个Map器创建的外部表上运行drop table?
使用的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
4c8rllxm

4c8rllxm1#

这是我在sqoop用户社区得到的回复(感谢szabolcsvasas)。
在netezza direct imports的情况下,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语句。
问题1。是的,sqoop需要创建外部表,但不需要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,第6例)。
问题3。无法在特定架构中创建外部表。
第四季度。不,sqoop不运行drop命令。
此外,由sqoop直接进程创建的表是netezza tet-transient external tables。因此,一旦Map程序以namedfifo的形式接收到数据,就会删除外部remotesource jdbc表。因此,在传输之后,表不会存储在netezza中。

相关问题