天天看點

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.