2013-07-17 91 views
1

我們正在嘗試將數據從sqoop加載到netezza。我們正面臨以下問題。Sqoop創建包含多個記錄的插入語句

java.io.IOException: org.netezza.error.NzSQLException: ERROR: 

示例輸入數據集,如下所示:如以下所示

1,2,3

1,3,4

sqoop命令:

sqoop export --table <tablename> --export-dir <path> 
--input-fields-terminated-by '\t' --input-lines-terminated-by '\n' --connect 
'jdbc:netezza://<host>/<db>' --driver org.netezza.Driver 
--username <username> --password <passwrd> 

Sqoop以下列方式創建插入語句:

插入(c1,c2,c3)值(1,2,3),(1,3,4)。

我們可以加載一條記錄,但是當我們嘗試將數據加載到多條記錄時,錯誤如上所述。

非常感謝您的幫助。

回答

4

製作sqoop.export.records.per.statement = 1一定會有幫助,但如果您的導出記錄數量非常大,這會使導出過程非常緩慢,例如「5百萬」。

爲了解決這個問題,你需要添加下面的事情:

1)屬性文件sqoop.properties,它必須包含這個屬性jdbc.transaction.isolation = TRANSACTION_READ_UNCOMMITTED(這期間出口僵局避免)

也在export命令需要指定這樣的:

--connection-PARAM文件/path/to/sqoop.properties

2.)另外sqoop.export.records.per.statement = 100,這樣會提高導出速度。

3.)第三,您必須添加- 批號,使用批處理模式執行底層語句。

所以,你最終出口將這個樣子,

sqoop export -D sqoop.export.records.per.statement=100 --table <tablename> --export-dir <path> 
--input-fields-terminated-by '\t' --input-lines-terminated-by '\n' --connect 
'jdbc:netezza://<host>/<db>' --driver org.netezza.Driver 
--username <username> --password <passwrd> 
--connection-param-file /path/to/sqoop.properties 
--batch 

希望這會有所幫助。

+0

很酷.. !!正是我需要:) – Maverick

+0

建議是完全有效的常見的關係數據庫,但因爲Netezza不支持多個記錄每個語句,它不適用於此。 -Dsqoop.export.records.per.statement = 1是要求輸出到Netezza的情況。 –

1

您可以自定義將在具有屬性「sqoop.export.records.per.statement」的一個插入語句中使用的行數。例如,對於Netezza公司,你需要將它設置爲1:

sqoop出口-Dsqoop.export.records.per.statement = 1 --connect ...

我建議你也看看在Apache Sqoop Cookbook這裏描述了這個和許多其他的技巧。

+0

非常感謝:) – Maverick