天天看點

Phoenix使用

目錄

phoenix連接配接

phoenix常用指令

表映射

視圖映射

phoenix二級索引

開啟索引支援

全局索引

建立索引後

建立多條件索引後

本地索引

覆寫索引

總結

phoenix jdbc

sqlline.py master,node1,node2

預設下,在hbase中建立的表phoenix中看不到,但phoenix中建立hbase可以看到

如果需要在phoenix中操作直接在hbase中建立的表,則需要在phoenix中進行表的映射。映射方式有兩種:視圖映射和表映射

phoenix建立的視圖是隻讀的,是以隻能用來做查詢,無法通過視圖對源資料進行修改等操作

查詢語句,表名用雙引号

删除視圖

用create table建立的關聯表,如果對表進行了修改,源資料也會改變,同時如果關聯表被删除,源表也會被删除。但是視圖就不會,如果删除視圖,源資料不會發生改變。

1.當hbase中已經存在表時,可以以類似建立視圖的方式建立關聯表

2.當hbase中不存在表時,可以直接使用create table指令建立需要的表,并且在建立指令中可以根據需要對hbase表結構進行顯示的說明。

全局索引适合讀多寫少的場景。如果使用全局索引,讀資料基本不損耗性能,所有的性能損耗都來源于寫資料。 資料表的添加、删除和修改都會更新相關的索引表(資料删除了,索引表中的資料也會删除;資料增加了,索引表的資料也會增加)

1.查詢字段未出現在索引列或者rowkey中,索引就不會生效

2.以前的内容:current count: 10000, row: 04da22137a3900bfa50507feba3dbe7a9f0e647d\x0020180503154849

建立end_date索引後:current count: 10000, row: 20180503084027\x004bebc55b4d3f426726465212929141b9249c3c27\x0020180503084827

也就是說建立這個end_date索引就是将end_date字段放在原來的rowkey的前面

查詢where條件時,需要跟上建立的所有索引,否則索引不生效,多個一起用

本地索引适合寫多讀少的場景,或者存儲空間有限的場景。和全局索引一樣,phoenix也會在查詢的時候自動選擇是否使用本地索引。 建構索引資料時,将索引資料直接存儲在原表中,用一個列族來實作 本地索引因為索引資料和原資料存儲在同一台機器上,避免網絡資料傳輸的開銷,是以更适合寫多的場景。 由于無法提前确定資料在哪個region上,是以在讀資料的時候,需要檢查每個region上的資料進而帶來一些性能損耗。
在建構全局索引時,将經常作為查詢條件的列放入include中,直接通過索引表來傳回資料結果 覆寫索引是把原資料存儲在索引資料表中,這樣在查詢時不需要再去hbase的原表擷取資料就,直接傳回查詢結果。 注意:查詢是 select 的列和 where 的列都需要在索引中出現。

全局索引和覆寫索引很像,全局索引select之後隻能跟索引的字段才能快速,否則需要強制索引,而覆寫索引select後可以跟include()中的字段

全局索引适合讀多寫少的場景,本地索引适合讀少寫多

本地索引可以直接select跟上想要查找的字段,例如select * from dianxin where grid_id='117285031820040';

全局索引和覆寫索引其實是建立一張表,而本地索引是列族

全局索引單獨把索引資料存到一張表裡,保證了原始資料的安全,侵入性小,本地索引把資料寫到原始資料裡面,侵入性強,原表的資料量=原始資料+索引資料,使原始資料更大

全局索引要多寫出來一份資料,寫的壓力就大一點,但讀的速度就非常快,本地索引隻用寫一份索引資料,節省不少空間,但多了一步通過rowkey查找資料,寫的速度非常快,讀的速度就沒有直接取自己的列族資料快。