我们正在尝试将数据从sqoop加载到netezza。我们正面临以下问题。
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)。
我们可以加载一条记录,但是当我们尝试将数据加载到多条记录时,错误如上所述。
非常感谢您的帮助。
答案 0 :(得分:5)
使 sqoop.export.records.per.statement = 1 肯定会有所帮助,但是如果您的导出记录数非常大,比如“500万”,这将使导出过程非常缓慢。
要解决此问题,您需要添加以下内容:
1。)属性文件 sqoop.properties ,它必须包含此属性 jdbc.transaction.isolation = TRANSACTION_READ_UNCOMMITTED (它避免了导出期间的死锁)
也可以在导出命令中指定:
- connection-param-file /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
希望这会有所帮助。
答案 1 :(得分:1)
您可以使用属性“sqoop.export.records.per.statement”自定义将在一个insert语句中使用的行数。例如,对于Netezza,您需要将其设置为1:
sqoop export -Dsqoop.export.records.per.statement = 1 --connect ...
我建议你也看一下Apache Sqoop Cookbook,其中描述了这个和许多其他提示。