当sqoop从hdfs导出到db2时,如何解析java.sql.sqlexception:[sql7008]数据库中的表名称对操作无效

vs3odd8k  于 2021-06-03  发布在  Sqoop
关注(0)|答案(1)|浏览(738)

我正试图使用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
wf82jlnq

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 开始记录需要置于承诺控制下的每个物理文件的日志。

相关问题