pid:60 nid:1 exception:setl:com.alibaba.otter.node.etl.load.exception.LoadException: java.util.concurrent.ExecutionException: com.alibaba.otter.node.etl.load.exception.LoadException: com.alibaba.otter.node.etl.load.exception.LoadException: com.alibaba.otter.node.etl.load.exception.LoadException: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [update yibai_plan_stock.yibai_amazon_account set account_name = ? , short_name = ? , account_num = ? where ( id = ? )]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'yibai_system.yibai_platform_account_to_bank_account' doesn't exist at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:233) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:603) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:812) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:868) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction$DbLoadWorker$2.doInTransaction(DbLoadAction.java:625) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction$DbLoadWorker.doCall(DbLoadAction.java:617) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction$DbLoadWorker.call(DbLoadAction.java:545) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction.doTwoPhase(DbLoadAction.java:462) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction.doLoad(DbLoadAction.java:275) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction.load(DbLoadAction.java:161) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction$$FastClassByCGLIB$$d932a4cb.invoke() at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191) at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:618) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction$$EnhancerByCGLIB$$80fd23c2.load() at com.alibaba.otter.node.etl.load.loader.db.DataBatchLoader$2.call(DataBatchLoader.java:198) at com.alibaba.otter.node.etl.load.loader.db.DataBatchLoader$2.call(DataBatchLoader.java:189) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
yibai_system.yibai_platform_account_to_bank_account 未配置到任何一个channel中,仅存在于yibai_system 库中
原提问者Github用户 Mycheers
这是一个异常日志,具体原因需要先了解异常信息的含义。
首先,可以看到最后一个异常信息是:
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [update yibai_plan_stock.yibai_amazon_account set account_name = ? , short_name = ? , account_num = ? where ( id = ? )]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'yibai_system.yibai_platform_account_to_bank_account' doesn't exist
这个异常信息说的是执行 SQL 时出现语法错误,具体是 update yibai_plan_stock.yibai_amazon_account 这个表中缺少 yibai_platform_account_to_bank_account 这个表,所以无法执行 SQL。
根据异常信息中提供的其他信息,可以看到这是在进行数据加载(Data Load)时发生的异常:
com.alibaba.otter.node.etl.load.exception.LoadException: java.util.concurrent.ExecutionException: com.alibaba.otter.node.etl.load.exception.LoadException: com.alibaba.otter.node.etl.load.exception.LoadException:
这个异常信息表明在数据加载过程中有一些异常,但没有提供具体异常信息。因此,需要进一步分析数据加载的过程,以确定是哪些操作导致了异常。
根据错误信息,可以看出是在执行更新语句时出现的异常,原因是 yibai_platform_account_to_bank_account
表不存在。
从错误信息中可以看出,该表未配置到任何一个 channel 中,仅存在于 yibai_system
库中。
首先,你需要检查一下数据库中是否真的存在 yibai_platform_account_to_bank_account
表,可以使用如下 SQL 语句查询:
SHOW TABLES LIKE 'yibai_platform_account_to_bank_account';
如果表不存在,你需要先创建该表,可以使用如下 SQL 语句:
CREATE TABLE yibai_platform_account_to_bank_account (
id BIGINT NOT NULL AUTO_INCREMENT,
platform_account_id BIGINT NOT NULL,
bank_account_id BIGINT NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
如果表已经存在,你需要检查一下该表是否配置到了 channel 中,如果没有配置,你需要将该表添加到 channel 中。你可以使用如下 SQL 语句将该表添加到 default
channel 中:
INSERT INTO otter_channel (channel_id, description, parameters) VALUES ('default', '', '{}');
INSERT INTO otter_channel_parameter (channel_id, parameter_key, parameter_value) VALUES ('default', 'table_exclude_regex', '^(?i)(otter|\\$\\{.*\\}|yibai_platform_account_to_bank_account)$');
INSERT INTO otter_channel_parameter (channel_id, parameter_key, parameter_value) VALUES ('default', 'table_include_regex', 'yibai_platform_account_to_bank_account');
这样,就可以将 yibai_platform_account_to_bank_account
表添加到 default
channel 中,然后重新执行更新语句,应该就不会出现该异常了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。