2016-03-28 10:34:47,131 Timer-0 ERROR (StatFilter.java:147) - merge sql error, dbType oracle, sql : merge into (select * from T09_RULE_CAL_COUNT where data_dt = '20160328' and rule_type = '2') t using (select cust_no,organ_key from (select t1.cust_no, t1.organ_key from t08_cust_result_c_mid t1 union (select t2.cust_no, t2.organ_key from t08_cust_result_i_mid t2))) t3 on(t3.cust_no =t.cust_no) when matched then update set t.organ_key=t3.organ_key com.alibaba.druid.sql.parser.ParserException: error LPAREN at com.alibaba.druid.sql.parser.SQLExprParser.name(SQLExprParser.java:813) at com.alibaba.druid.sql.dialect.oracle.parser.OracleExprParser.name(OracleExprParser.java:985) at com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser.parseMerge(OracleStatementParser.java:1133) at com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser.parseStatementList(OracleStatementParser.java:212) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:112) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:107) at com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils.parameterize(ParameterizedOutputVisitorUtils.java:54) at com.alibaba.druid.filter.stat.StatFilter.mergeSql(StatFilter.java:145) at com.alibaba.druid.filter.stat.StatFilter.createSqlStat(StatFilter.java:629) at com.alibaba.druid.filter.stat.StatFilter.statementPrepareAfter(StatFilter.java:305) at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:124) at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:448) at com.alibaba.druid.filter.FilterAdapter.connection_prepareStatement(FilterAdapter.java:928) at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:122) at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:448) at com.alibaba.druid.filter.FilterAdapter.connection_prepareStatement(FilterAdapter.java:928) at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:122) at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:448) at com.alibaba.druid.filter.FilterAdapter.connection_prepareStatement(FilterAdapter.java:928) at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:122) at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:448) at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement(ConnectionProxyImpl.java:342) at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:318) at com.resoft.aml.server.db.SQLExecute.exeSql(SQLExecute.java:296) at com.resoft.aml.server.db.SQLExecute.exeSql(SQLExecute.java:277) at com.resoft.aml.server.db.SQLExecute.exeSql(SQLExecute.java:264) at com.resoft.risk.server.cal.rule.score.ComputeRiskRuleCal.mergeIntoT09RuleCalCount(ComputeRiskRuleCal.java:1303) at com.resoft.risk.server.cal.rule.score.ComputeRiskRuleCal.runInsert(ComputeRiskRuleCal.java:329) at com.resoft.aml.server.cal.task.CompRiskRuleCal.runInsert(CompRiskRuleCal.java:30) at com.resoft.aml.server.cal.BaseTask.insertResult(BaseTask.java:73) at com.resoft.aml.server.cal.BaseTask.executeTask(BaseTask.java:48) at com.resoft.aml.server.cal.BaseServer.calTask(BaseServer.java:309) at com.resoft.aml.server.AMLTaskServer.executeTasks(AMLTaskServer.java:81) at com.resoft.aml.server.AMLTaskServer.access$0(AMLTaskServer.java:61) at com.resoft.aml.server.AMLTaskServer$1.run(AMLTaskServer.java:49) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462)
原提问者GitHub用户zhuangmofei
在Apache Druid中,目前不支持解析MERGE语句。Apache Druid是一种分布式、实时的数据存储和查询系统,其主要用途是存储和查询大规模的实时数据。Druid的查询语言是以SQL为基础的,并支持大部分的SQL语法和数据类型。
然而,MERGE语句并不是标准的SQL语句,而是Oracle数据库特有的语法。MERGE语句用于将数据从一个表合并到另一个表中,如果目标表不存在,MERGE语句会创建目标表。MERGE语句通常用于数据仓库等场景中,用于将数据从临时表合并到主表中。
由于MERGE语句是Oracle数据库特有的语法,在其他数据库或数据存储系统中并不一定被支持。在Apache Druid中,目前不支持解析MERGE语句,因为MERGE语句并不是Druid查询语言的一部分。
如果您需要将数据从一个表合并到另一个表中,可以考虑使用其他的数据存储和处理系统,例如Apache Hadoop、Apache Spark等。这些系统提供了丰富的数据处理和ETL(Extract-Transform-Load)功能,可以实现数据的合并、清洗、转换等操作。同时,这些系统也提供了与Druid相集成的接口和工具,可以将处理好的数据加载到Druid中进行分析和查询。
根据您提供的错误信息,可以看出Druid解析器在解析merge
语句时抛出了异常。具体错误信息为com.alibaba.druid.sql.parser.ParserException: error LPAREN
。
根据错误信息,错误发生在SQLExprParser.name(SQLExprParser.java:813)
这一行,表明解析器在解析名称时遇到了问题。
根据Druid的文档,当前版本的Druid(1.0.14)对于Oracle数据库的merge
语句的支持是有限的,并且不支持所有可能的语法和功能。因此,您遇到的问题可能是由于Druid解析器尚未实现或者存在一些限制导致的。
建议您检查您的merge
语句的语法,确保其符合Oracle数据库的语法规范。如果语法正确,那么您可能需要考虑使用其他方法来解析和执行merge
语句,例如使用Oracle自带的JDBC驱动程序来执行。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。