Jdbc 如何解决java.sql.SQLException:[SQL7008]在sqoop从hdfs导出到DB2时,数据库中的表名对操作无效

Jdbc 如何解决java.sql.SQLException:[SQL7008]在sqoop从hdfs导出到DB2时,数据库中的表名对操作无效,jdbc,db2,sqoop,ibm-midrange,Jdbc,Db2,Sqoop,Ibm Midrange,我试图使用sqoop导出将文件从HDFS导出到DB2 AS400表,并得到以下错误: Caused by: java.sql.SQLException: [SQL7008] SCORE in OPIDSYS not valid for operation. 在线调查时,我得到了以下链接: 但我不确定日志是什么意思,我的AS400架构师也不知道这一点 我的Sqoop: sqoop export --driver com.ibm.as400.access.AS400JDBCDriver --con

我试图使用sqoop导出将文件从HDFS导出到DB2 AS400表,并得到以下错误:

Caused by: java.sql.SQLException: [SQL7008] SCORE in OPIDSYS not valid for operation.
在线调查时,我得到了以下链接:

但我不确定日志是什么意思,我的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

SQL7008有许多原因,如果不在消息的次要文本中看到原因码,则无法确定确切原因。其中一个原因是您试图对未记录日志的表使用承诺控制

日志记录是DB2fori用来记录数据库事务的方法,提交控制使用日志记录来启用
commit
rollback
。事实上,记录级访问(读取、链等)和SQL也是如此,尽管RLA默认为无承诺控制,SQL默认为使用承诺控制。如果您的表没有日志记录,您仍然可以使用SQL

在使用嵌入式提交控件(CRTSQLRPG、CRTSQLRPGI等)或使用RUNSSQLSTM创建程序时,需要确保使用COMMIT(*NONE)。默认值是COMMIT(*CHG)。STRSQL的默认值已经是COMMIT(*NONE)

如果您通过DBeaver或squirrelsqlclient这样的客户机使用SQL,则需要确保连接默认为无承诺控制。具体来说,如何实现这一点取决于您是使用JDBC还是ODBC进行连接,但您应该能够找到每个连接的特定连接属性

如果您真的想使用承诺控制(这是个不错的主意),那么您需要开始记录数据库中需要承诺控制保护的所有物理文件(表),如果不是所有物理文件(表),您需要记住有选择地关闭那些未记录的表的承诺控制,您的
INSERT
UPDATE
DELETE
语句中的
WITH NC
子句将执行此操作


要打开日志记录,您需要确保有日志和日志接收者。如果它们不存在,则将它们与物理文件放在同一个库中。首先使用
CRTJRNRCV
创建接收器,然后使用
CRTJRN
创建日记账
CRTJRN
需要您先前创建的接收器的名称。拥有日志后,您可以使用STRJRNPF开始对需要置于承诺控制下的每个物理文件进行日志记录。

SQL7008有许多原因,如果不在消息的辅助文本中查看原因代码,则无法确定确切原因。其中一个原因是您试图对未记录日志的表使用承诺控制

日志记录是DB2fori用来记录数据库事务的方法,提交控制使用日志记录来启用
commit
rollback
。事实上,记录级访问(读取、链等)和SQL也是如此,尽管RLA默认为无承诺控制,SQL默认为使用承诺控制。如果您的表没有日志记录,您仍然可以使用SQL

在使用嵌入式提交控件(CRTSQLRPG、CRTSQLRPGI等)或使用RUNSSQLSTM创建程序时,需要确保使用COMMIT(*NONE)。默认值是COMMIT(*CHG)。STRSQL的默认值已经是COMMIT(*NONE)

如果您通过DBeaver或squirrelsqlclient这样的客户机使用SQL,则需要确保连接默认为无承诺控制。具体来说,如何实现这一点取决于您是使用JDBC还是ODBC进行连接,但您应该能够找到每个连接的特定连接属性

如果您真的想使用承诺控制(这是个不错的主意),那么您需要开始记录数据库中需要承诺控制保护的所有物理文件(表),如果不是所有物理文件(表),您需要记住有选择地关闭那些未记录的表的承诺控制,您的
INSERT
UPDATE
DELETE
语句中的
WITH NC
子句将执行此操作


要打开日志记录,您需要确保有日志和日志接收者。如果它们不存在,则将它们与物理文件放在同一个库中。首先使用
CRTJRNRCV
创建接收器,然后使用
CRTJRN
创建日记账
CRTJRN
需要您先前创建的接收器的名称。拥有日志后,您可以使用STRJRNPF开始记录需要置于承诺控制下的每个物理文件。

一些自称为AS400架构师的人应该真正知道日志是什么。你在谷歌搜索时发现的答案很可能是正确的。这是一篇关于什么是日志以及它的作用的好文章,一些自称为AS400架构师的人应该真正知道日志是什么。你在谷歌搜索时发现的答案很可能是正确的。这是一篇关于什么是日志以及它的作用的好文章