我们正在使用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)
答案 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中。