Sqoop直接导入Netezza表权限

时间:2017-01-27 21:43:35

标签: hadoop netezza sqoop

我们正在使用netezza direct将数据从Netezza导入到HOCop,作为POC的一部分。

有关Netezza特定和Netezza Sqoop集成的几个问题。

Q1。 Sqoop直接模式是否始终需要CREATE EXTERNAL TABLE和DROP权限才能执行直接传输?

Q2。外部表是否在Netezza中创建?如果是,哪个数据库?我使用以下查询看到Sqoop:

private function getPDO() {
    if($this->pdo === null){
        $pdo = new PDO('mysql:dbname=mydb;host=localhost', 'root', '');
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $this->pdo = $pdo;  
    }
    else{
        $pdo = $this->pdo;
    }
    return $pdo;
}

是否在db URL中选择的数据库中创建? JDBC:Netezza公司:// somehostname:5480 / SOME_DB_1

Q3。如果Netezza需要创建外部表,它是否可以在不同数据库中创建外部表,而不是具有需要将数据拉入Hadoop的实际表。什么是需要完成的配置更改?

Q4。 Sqoop是否在外部表上运行由各个映射器创建的DROP表?

使用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)

1 个答案:

答案 0 :(得分:0)

这是我在Sqoop用户社区中的回复(感谢Szabolcs Vasas)。

在Netezza直接导入的情况下,Sqoop执行CREATE EXTERNAL TABLE命令(因此您将需要CREATE EXTERNAL TABLE权限)来创建表的内容到临时文件的备份,并复制此内容文件到HDFS的最终输出。 您在电子邮件中粘贴的SQL命令确实是由Sqoop执行的SQL命令,但据我所知,从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特权。

Q2。 Sqoop并没有真正在任何模式中创建一个新的外部表,它只是备份表的内容(http://www.ibm.com/support/knowledgecenter/SSULQD_7.2.1/com.ibm.nz.load.doc/c_load_create_external_tbl_expls.html,第六个例子)。

Q3。无法在特定架构中创建EXTERNAL表。

Q4。不,Sqoop不运行DROP命令。

此外,sqoop直接流程创建的表格为Netezza TET - Transient external tables。因此,一旦映射器以NamedFifo的形式接收数据,就会删除外部远程源JDBC表。因此,传输后表格不会存储在Netezza中。