我正试图使用sqoop export将一个文件从hdfs导出到db2 as400表,出现以下错误:
Caused by: java.sql.SQLException: [SQL7008] SCORE in OPIDSYS not valid for operation.
当我在网上搜索时,我得到了以下链接:http://www.websina.com/bugzero/faq/exception-as400.html
但我不确定日志是什么意思,我的as400架构师也不知道这一点。
我的sqoop:
sqoop export --driver com.ibm.as400.access.AS400JDBCDriver --connect jdbc:as400://SERVER:0000/DB --username xxx --password 'xxx' --table DB.SCORE --direct --export-dir '/test/path/' --input-fields-terminated-by ',' --input-lines-terminated-by '\n' --input-null-string '\\\\N' --input-null-non-string '\\\\N' --verbose
hdfs数据示例:
match,score
11,2
22,9
33,4
1条答案
按热度按时间wf82jlnq1#
sql7008有许多原因,如果在消息的第二个文本中看不到原因码,则无法确定确切的原因。其中一个原因是您试图对未记录日志的表使用承诺控制。
日志记录是db2fori用来记录数据库事务的方法,commitmentcontrol使用它来启用
commit
以及rollback
. 事实上,记录级访问(读取、链等)和sql也是如此,尽管rla默认为no commitment control,sql默认为使用commitment control。如果您的表没有日志记录,您仍然可以使用sql。在使用嵌入式提交控件(crtsqlrpg、crtsqlrpgi等)或使用runsqlstm创建程序时,需要确保使用commit(*none)。默认值为commit(*chg)。strsql的默认值已经是commit(*none)。
如果您是通过dbeaver或squirrelsql客户机这样的客户机使用sql,则需要确保连接默认为no commitment control。具体来说,如何进行连接取决于您是使用jdbc还是odbc进行连接,但是您应该能够找到每个连接的特定连接属性。
如果您真的想使用承诺控制(这主意不错),那么您需要开始记录数据库中所有需要由承诺控制保护的物理文件(表)的日志,如果不是所有的物理文件(表),那么您需要记住有选择地关闭那些未记录日志的表的承诺控制
WITH NC
关于你方的条款INSERT
,UPDATE
,和DELETE
声明可以做到这一点。要打开日志记录,您需要确保您有一个日志和一个日志接收者。如果它们不存在,则将它们与物理文件放在同一个库中。首先创建接收器
CRTJRNRCV
,然后用CRTJRN
.CRTJRN
将需要您先前创建的接收器的名称。在你有了一本日记之后,你就可以使用STRJRNPF
开始记录需要置于承诺控制下的每个物理文件的日志。