Mycat在使用注解ShareJoin遇到的错误
来源:互联网 发布:java中tcp和udp的区别 编辑:程序博客网 时间:2024/06/06 03:25
版本Mycat-server-1.4-RC-20150823180032-linux.tar和Mycat-server-1.4-release-20151019230038-linux.tar.gz
在执行跨库join时遇到的错误如下:
_11/2400:48:26.701 INFO [$_NIOREACTOR-0-RW](FrontendAuthenticator.java:164) -ServerConnection [id=1, schema=null,host=192.168.40.1, user=bin,txIsolation=3, autocommit=true, schema=null]'bin'login success
11/2400:48:26.843 INFO [$_NIOREACTOR-0-RW](JoinParser.java:70) -SQL: SELECT a.*,m.* from member m JOIN member_addr awhere m.id=a.member_id
11/2400:48:26.918 INFO [$_NIOREACTOR-0-RW](ShareJoin.java:150) -Catlet exec:dn1,dn2, sql:select * from member
11/2400:48:26.924 ERROR [$_NIOREACTOR-0-RW](DruidMycatRouteStrategy.java:46) -DruidMycatRouteStrategyError
com.alibaba.druid.sql.parser.ParserException:syntax error, expect RPAREN, actual IDENTIFIER e
atcom.alibaba.druid.sql.parser.SQLExprParser.accept(SQLExprParser.java:1471)
atcom.alibaba.druid.sql.parser.SQLExprParser.inRest(SQLExprParser.java:1074)
atcom.alibaba.druid.sql.parser.SQLExprParser.exprRest(SQLExprParser.java:135)
atcom.alibaba.druid.sql.parser.SQLExprParser.expr(SQLExprParser.java:125)
atcom.alibaba.druid.sql.parser.SQLSelectParser.expr(SQLSelectParser.java:457)
atcom.alibaba.druid.sql.parser.SQLSelectParser.parseWhere(SQLSelectParser.java:237)
atcom.alibaba.druid.sql.dialect.mysql.parser.MySqlSelectParser.query(MySqlSelectParser.java:134)
atcom.alibaba.druid.sql.parser.SQLSelectParser.select(SQLSelectParser.java:60)
atcom.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser.parseSelect(MySqlStatementParser.java:196)
atcom.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:145)
atcom.alibaba.druid.sql.parser.SQLStatementParser.parseStatement(SQLStatementParser.java:1658)
atorg.opencloudb.route.impl.DruidMycatRouteStrategy.routeNormalSqlWithAST(DruidMycatRouteStrategy.java:43)
atorg.opencloudb.route.impl.AbstractRouteStrategy.route(AbstractRouteStrategy.java:61)
atdemo.catlets.ShareJoin.getRoute(ShareJoin.java:114)
atdemo.catlets.ShareJoin.createQryJob(ShareJoin.java:225)
atdemo.catlets.ShareJoin.endJobInput(ShareJoin.java:185)
atdemo.catlets.ShareDBJoinHandler.finished(ShareJoin.java:324)
atorg.opencloudb.sqlengine.SQLJob.doFinished(SQLJob.java:103)
atorg.opencloudb.sqlengine.SQLJob.rowEofResponse(SQLJob.java:153)
atorg.opencloudb.mysql.nio.MySQLConnectionHandler.handleRowEofPacket(MySQLConnectionHandler.java:223)
atorg.opencloudb.mysql.nio.MySQLConnectionHandler.handleData(MySQLConnectionHandler.java:131)
atorg.opencloudb.net.handler.BackendAsyncHandler.offerData(BackendAsyncHandler.java:36)
atorg.opencloudb.mysql.nio.MySQLConnectionHandler.handle(MySQLConnectionHandler.java:79)
atorg.opencloudb.net.AbstractConnection.handle(AbstractConnection.java:257)
atorg.opencloudb.net.AbstractConnection.onReadData(AbstractConnection.java:307)
atorg.opencloudb.net.NIOSocketWR.asynRead(NIOSocketWR.java:186)
atorg.opencloudb.net.AbstractConnection.asynRead(AbstractConnection.java:268)
atorg.opencloudb.net.NIOReactor$RW.run(NIOReactor.java:96)
at java.lang.Thread.run(Thread.java:745)
11/2400:48:26.940 INFO [$_NIOREACTOR-0-RW](ShareJoin.java:229) -SQLParallJob:dn1,dn2, sql:select * from member_addr wheremember_id in(f21daa38-157d-4e05-9e64-03a284e45d71,4e15016e-d6d3-4641-b0e0-024524c3d354,9dfd5c4c-4a70-4d51-a19a-32b68cd422dc,4ba5382a-a1ba-4486-bdf6-7f2e1381cefd,2f6266c3-b853-46d9-8cf7-785ff0b4c862,29621cbc-1556-4354-b2eb-30daaafdabad,b6eb156f-489b-4a40-b88e-41d870a47289,6f4ed84e-4d8d-41aa-a611-877084bef85d,4a98b36e-d58a-4b1b-84c4-44da278c500b,0950b2da-5900-4edc-9057-2e254bff168f)
11/2400:48:26.941 INFO [$_NIOREACTOR-0-RW](SQLJob.java:120) -error response Illegal double '4e15016' value found duringparsing from of sql :select * from member_addr where member_id in(f21daa38-157d-4e05-9e64-03a284e45d71,4e15016e-d6d3-4641-b0e0-024524c3d354,9dfd5c4c-4a70-4d51-a19a-32b68cd422dc,4ba5382a-a1ba-4486-bdf6-7f2e1381cefd,2f6266c3-b853-46d9-8cf7-785ff0b4c862,29621cbc-1556-4354-b2eb-30daaafdabad,b6eb156f-489b-4a40-b88e-41d870a47289,6f4ed84e-4d8d-41aa-a611-877084bef85d,4a98b36e-d58a-4b1b-84c4-44da278c500b,0950b2da-5900-4edc-9057-2e254bff168f) at con:MySQLConnection [id=16,lastTime=1448354906924, schema=db1, old shema=db1, borrowed=true,fromSlaveDB=false, threadId=2415, charset=latin1, txIsolation=0,autocommit=true, attachment=dn1{select * from member_addr where member_id in(f21daa38-157d-4e05-9e64-03a284e45d71,4e15016e-d6d3-4641-b0e0-024524c3d354,9dfd5c4c-4a70-4d51-a19a-32b68cd422dc,4ba5382a-a1ba-4486-bdf6-7f2e1381cefd,2f6266c3-b853-46d9-8cf7-785ff0b4c862,29621cbc-1556-4354-b2eb-30daaafdabad,b6eb156f-489b-4a40-b88e-41d870a47289,6f4ed84e-4d8d-41aa-a611-877084bef85d,4a98b36e-d58a-4b1b-84c4-44da278c500b,0950b2da-5900-4edc-9057-2e254bff168f)}, respHandler=SQLJob [ id=3,dataNodeOrDatabase=dn1,sql=select * frommember_addr where member_id in(f21daa38-157d-4e05-9e64-03a284e45d71,4e15016e-d6d3-4641-b0e0-024524c3d354,9dfd5c4c-4a70-4d51-a19a-32b68cd422dc,4ba5382a-a1ba-4486-bdf6-7f2e1381cefd,2f6266c3-b853-46d9-8cf7-785ff0b4c862,29621cbc-1556-4354-b2eb-30daaafdabad,b6eb156f-489b-4a40-b88e-41d870a47289,6f4ed84e-4d8d-41aa-a611-877084bef85d,4a98b36e-d58a-4b1b-84c4-44da278c500b,0950b2da-5900-4edc-9057-2e254bff168f), jobHandler=demo.catlets.ShareRowOutPutDataHandler@18f67fc],host=192.168.40.147, port=3306, statusSync=null, writeQueue=0,modifiedSQLExecuted=false]
11/2400:48:26.941 INFO [$_NIOREACTOR-0-RW](SQLJob.java:120) -error response Illegal double '4e15016' value found duringparsing from of sql :select * from member_addr where member_id in(f21daa38-157d-4e05-9e64-03a284e45d71,4e15016e-d6d3-4641-b0e0-024524c3d354,9dfd5c4c-4a70-4d51-a19a-32b68cd422dc,4ba5382a-a1ba-4486-bdf6-7f2e1381cefd,2f6266c3-b853-46d9-8cf7-785ff0b4c862,29621cbc-1556-4354-b2eb-30daaafdabad,b6eb156f-489b-4a40-b88e-41d870a47289,6f4ed84e-4d8d-41aa-a611-877084bef85d,4a98b36e-d58a-4b1b-84c4-44da278c500b,0950b2da-5900-4edc-9057-2e254bff168f) at con:MySQLConnection [id=10,lastTime=1448354906924, schema=db1, old shema=db1, borrowed=true,fromSlaveDB=false, threadId=2194, charset=latin1, txIsolation=0, autocommit=true,attachment=dn2{select * from member_addr where member_id in(f21daa38-157d-4e05-9e64-03a284e45d71,4e15016e-d6d3-4641-b0e0-024524c3d354,9dfd5c4c-4a70-4d51-a19a-32b68cd422dc,4ba5382a-a1ba-4486-bdf6-7f2e1381cefd,2f6266c3-b853-46d9-8cf7-785ff0b4c862,29621cbc-1556-4354-b2eb-30daaafdabad,b6eb156f-489b-4a40-b88e-41d870a47289,6f4ed84e-4d8d-41aa-a611-877084bef85d,4a98b36e-d58a-4b1b-84c4-44da278c500b,0950b2da-5900-4edc-9057-2e254bff168f)}, respHandler=SQLJob [ id=4,dataNodeOrDatabase=dn2,sql=select * from member_addrwhere member_id in(f21daa38-157d-4e05-9e64-03a284e45d71,4e15016e-d6d3-4641-b0e0-024524c3d354,9dfd5c4c-4a70-4d51-a19a-32b68cd422dc,4ba5382a-a1ba-4486-bdf6-7f2e1381cefd,2f6266c3-b853-46d9-8cf7-785ff0b4c862,29621cbc-1556-4354-b2eb-30daaafdabad,b6eb156f-489b-4a40-b88e-41d870a47289,6f4ed84e-4d8d-41aa-a611-877084bef85d,4a98b36e-d58a-4b1b-84c4-44da278c500b,0950b2da-5900-4edc-9057-2e254bff168f), jobHandler=demo.catlets.ShareRowOutPutDataHandler@18f67fc],host=192.168.40.148, port=3306, statusSync=null, writeQueue=0,modifiedSQLExecuted=false]
11/2400:48:26.941 INFO [$_NIOREACTOR-0-RW](EngineCtx.java:171) -all job finished for front connection: ServerConnection [id=1, schema=YITIAN,host=192.168.40.1, user=bin,txIsolation=3, autocommit=true, schema=YITIAN]
11/2400:48:26.942 INFO [$_NIOREACTOR-0-RW](EngineCtx.java:159) -write eof,packgId:1
11/2400:48:26.942 INFO [$_NIOREACTOR-0-RW](ShareJoin.java:159) -发送数据OK
解决办法:
修改源码demo.catlets.ShareJoin中的createQryJob方法
private void createQryJob(int batchSize) {
int count = 0;
Map<String, byte[]> batchRows = new ConcurrentHashMap<String, byte[]>();
String theId = null;
StringBuilder sb = new StringBuilder().append('(');
String svalue="";
for(Map.Entry<String,String> e: ids.entrySet() ){
theId=e.getKey();
batchRows.put(theId, rows.remove(theId));
if (!svalue.equals(e.getValue())){
sb.append("'"+e.getValue()+"'").append(',');
}
svalue=e.getValue();
if (count++ > batchSize) {
break;
}
}
/*
while ((theId = ids.poll()) != null) {
batchRows.put(theId, rows.remove(theId));
sb.append(theId).append(',');
if (count++ > batchSize) {
break;
}
}
*/
if (count == 0) {
return;
}
jointTableIsData=true;
sb.deleteCharAt(sb.length() - 1).append(')');
String sql = String.format(joinParser.getChildSQL(), sb);
//if (!childRoute){
getRoute(sql);
//childRoute=true;
//}
ids.clear();//清除上一次查询的id结果集,源码中没有这 //句,导致跨分片查询失败
ctx.executeNativeSQLParallJob(getDataNodes(),sql, new ShareRowOutPutDataHandler(this,fields,joinindex,joinParser.getJoinRkey(), batchRows));
EngineCtx.LOGGER.info("SQLParallJob:"+getDataNode(getDataNodes())+" sql:" + sql);
}
如上所示,加粗加大的那行代码是错误引起的原因,那是已经改正后的
- Mycat在使用注解ShareJoin遇到的错误
- Mycat使用遇到的错误
- mycat ShareJoin后少了2条记录的问题剖析详细过程
- mycat 的使用
- MyCat的使用
- 在使用Struts时遇到的各种错误总结
- hibernate 使用注解的 错误
- 在使用Spring的事务注解@Transactional的时候遇到几个坑
- 【springboot】使用注解遇到的问题
- hibernate5使用注解遇到的问题
- Mycat高级进阶---Mycat注解
- 【Mycat 发展遇到的瓶颈问题】
- mycat分片join——sharejoin-改自官方权威指南
- 使用jbpm4遇到的错误
- 使用EGOPullDownRefresh遇到的错误
- 使用CXF遇到的错误
- 使用Hive遇到的错误
- 使用git遇到的错误
- 解决误删datafile导致数据库无法启动的问题
- echarts图表导出excel
- SpringMVC下的kindeditor实现
- [终端工具] 方便实用的下拉式(Top-Down)终端 --- Guake Terminal
- java正则表达式(HTML提取)
- Mycat在使用注解ShareJoin遇到的错误
- Android控件之AutoCompleteTextView
- 差分gps系统搭建
- iOS 多线程编程之GCD
- Maven中国镜像
- 布局中使用权重对齐问题
- iOS学习笔记--04 NSUserDefaults
- iOS开发笔记-判断输入的是否是汉字
- ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别