lealone / Lealone

比 MySQL 和 MongoDB 快10倍的 OLTP 关系数据库和文档数据库
Other
2.47k stars 518 forks source link

2个lealone使用join查询的问题 #57

Closed xiang82 closed 9 years ago

xiang82 commented 11 years ago

下面是2个lealone使用join查询的问题:

  1. 使用create hbase table的方式建表,插入数据后进行如下inner join查询,发现执行过程中会报错,请问能否解决? select a.date_time,b.date_time from cht01 a join cht02 b on a.date_time=b.date_time where a.rowkey='1970-01-01 00:00:01' and b.rowkey='1970-01-01 00:00:01';

报错信息: Error: General error: "com.codefollower.lealone.hbase.command.RetryableCommand$RetriesExhaustedException: java.lang.ArrayIndexOutOfBoundsException: -2"; SQL statement: select a.date_time,b.date_time from cht01 a join cht02 b on a.date_time=b.date_time where a.rowkey='1970-01-01 00:00:01' and b.rowkey='1970-01-01 00:00:01' [50000-171] SQLState: HY000 ErrorCode: 50000

(但是使用create table方式建的表,执行同样的查询,就能执行成功: select a.date_time,b.date_time from ct01 a join ct02 b on a.date_time=b.date_time where a.date_time='1970-01-01 00:00:01' and b.date_time='1970-01-01 00:00:01';)

  1. 既然create table方式建表可以使用join查询,那么我加大数据量后继续测试,大约5千万和1亿的2张表,还是执行相同的查询,发现耗时会非常久,效率很低,感觉像做了一次全表匹配。请问是怎么回事? select a.date_time,b.date_time from ct50m a join ct100m b on a.date_time=b.date_time where a.date_time='1970-01-01 00:00:01' and b.date_time='1970-01-01 00:00:01';
codefollower commented 11 years ago

谢谢反馈,我查一下 :)

freemanhjr commented 11 years ago

其实我建议将create table和create hbase table的命令合并,都用create table;对于hbase table的属性比如split key等在option里体现;rowkey也统一;这样下面处理起来也方便,给用户的接口也统一,本来就是要给用户提供标准的sql接口的;

codefollower commented 11 years ago

是的,我正在尝试将create table和create hbase table的命令合并,这两种命令的确是造成困扰最多的地方。