开发者社区> 问答> 正文

Druid不支持解析merge语句吗

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

展开
收起
山海行 2023-07-05 22:01:08 322 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在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中进行分析和查询。

    2023-07-29 23:23:10
    赞同 展开评论 打赏
  • 支持的,你这个是版本不对吧,升级下版本。

    原回答者GitHub用户wenshao

    2023-07-06 12:31:35
    赞同 展开评论 打赏
  • 根据您提供的错误信息,可以看出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驱动程序来执行。

    2023-07-06 09:16:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像