天天看点

hypertable使用小记,持续更新中。。。

Hypertable数据查询时的显示次序:

  1. 按rowkey升序显示;
  2. Cf按照表格创建时指定的次序显示;
  3. Cq按名称升序显示;
  4. value按照插入的次序倒序显示。

Cf索引和cq索引:

  1. cf索引:按照cf的value进行排序,value相同的,按照rowkey进行排序。多个cf索引按照索引次序进行分组,第一个索引序号为1,后续索引序号依次类推。
  2. cq索引:按照cq名称进行排序,名称相同的,按照rowkey排序。多个cq索引按照索引次序进行分组,第一个索引序号为1,后续索引序号依次类推。Cq索引与value无关。
  3. 数据删除时,索引表不会自动更新。

HQL语句:

1.select语句

Where 子句:

  • 可按照row、cell、timestamp、value、cf条件进行过滤。
  • 以cf为条件时,select关键字之后不能跟随“*”,只能跟随作为条件的cf或者其包含的cq。
  • Value条件会进行全表扫描,其不支持关系运算符,只支持正则表达式,例如where value=”abc”将会报错。
  • Row、cell和cf条件都支持“=^”操作,value和timestamp则不支持。
  • 多个条件一般可以进行AND组合查询,组合情况包括:row、cell、value、cf都能和timestamp进行AND组合;row还能和value、cf进行AND组合;Row和cf都不能和cell进行AND组合;cell可以和value进行AND组合;cf和value不能进行AND组合。
  • 多个row条件之间可以进行OR组合,但是需要用括号标记所有条件,例如:(row="" or row="")、(""<=row<"" or ""<row<="")
  • WHERE CELL =^ "foo","cf:a",该条件查找指定的row和列族中,以“a”为列名称首字符的CELL值,其中“foo”表示row值,“cf”表示列族名称。
  • 只有row和value条件支持正则表达式,正则表达式以””作为限定符,例如:where row regexp "http://.*"。
  • Select关键字之后的cq可以使用正则表达式,正则表达式以//作为限定符,例如:select col1:/^w[^a-zA-Z]*$/和select CELLS col1:/^w[^a-zA-Z]*$/,其中col1为列族名称,两种表示效果等效。
  • row=^"" and ""<=row<=""将会出现并集结果,如果想获得交集结果,可采用:""<=row<="" and row regexp "^"。

2.Delete语句

  • 可以删除rowkey对应的多个cell和单个cell,可以删除单个cell的不同版本。
  • 一次delete语句只能对一个rowkey进行操作,即where之后只能出现row=‘rowkey’的情况。

3.Insert语句     Insert into tab values("tm","row","cf:cq","value"),可以插入一个CELL。如果多个CELL的tm、row、cf:cq相同,则会实现表面的Update操作,但实际上原CELL仍然存在,只是新增了一个CELL而已。

TTL说明: 例如一个表在创建时指定了TTL,超过TTL的CELL虽然查询不出来,但是表里面仍然存在,即不能尽快释放磁盘空间。如果该表创建了索引,超过TTL的数据仍然在索引表中存在。

临时表: 在查询的过程中,Hypertable会产生临时表,尤其是在查询结果集较大的 时候,在监控界面可以清楚的看到类似”tmp/08eb3540-8ba1-44a8-ae9c-9c778ef5814d“的记录,这就是临时表。如果查询正常结束,临时表会自动删除,但是如果查询意外中断,临时表将会永远存在。此时需要手动删除,删除方法同普通用户表,但是表名要加引号,例如:

use tmp;

drop table "08eb3540-8ba1-44a8-ae9c-9c778ef5814d";

Hypertable启动时注意事项: 当Cap start后,集群会频繁的进行compaction、split、balance等操作,所以导致监控界面中用户表可能不能及时显示。如果数据量较大,在操作过程中还会出现rs机器故障,具体表现为:监控页面中rs变红,并且rangeserver.log中会提示38060端口连接失败。此时需要手动启动故障机器的rangeserver服务即可(安装目录/bin/start-rangeserver.sh)。当然,如果数据量较大,还需要足够的耐心等待compaction、split、balance等操作的完成。。。。。。否则即使在监控页面看到用户表,其数据可能也不完整。

手动去除一台RangeServer /opt/hypertable/current/bin/ht_rsclient

BALANCE ALGORITHM='OFFLOAD rs1'

手动触发Major Compaction /opt/hypertable/current/bin/ht_rsclient

help 

help compact       compact table "hyt/foo"; 

compact ranges user;  This command schedules a major compaction for each range specified

in the command.  The TABLE version of the command will schedule

a major compaction for each range in the given table.  The RANGES

version of the command will schedule compactions for all the ranges

of the given type(s), regardless of what table they belong to.

NOTE:  Compactions scheduled by this command are spread out over time.

During each maintenance interval, which by default happens once every

60 seconds, a limited number of these compactions will get scheduled

as controlled by the following property:

  Hypertable.RangeServer.Maintenance.MoveCompactionsPerInterval

The default value for this property is 2.