一:Hbase 創(chuàng)建數(shù)據(jù)庫表
1.進(jìn)入hbase shell
2.創(chuàng)建數(shù)據(jù)庫表的命令:create '表名', '列族名1','列族名2','列族名N'
3.如果想查看所有數(shù)據(jù)庫表恋技,可以使用list 命令:
4.可以看到,剛創(chuàng)建的數(shù)據(jù)庫表user 已經(jīng)在數(shù)據(jù)庫表的列表中烫扼,如果要看user表的結(jié)構(gòu)哀澈,可以用命令:describe ‘user’
二:Hbase數(shù)據(jù)庫表數(shù)據(jù)的增、刪割按、改、查
1.Hbase 增加數(shù)據(jù)的語法格式如下:
put ‘表名’, ‘rowKey’, ‘列族 : 列’?,? '值'
2.Hbase查詢數(shù)據(jù)的語法格式如下:
?通過命令:scan ‘表名’? ?來查看表的所有記錄
3.count? '表名' 來查看表中的所有記錄的數(shù)量(根據(jù)rowKey來計(jì)算)
4.通過命令:get '表名','rowkey','列族' 來查看某個(gè)rowKey列族的記錄
? ? ? ? ? ? ? ? ? ? ?get '表名','rowkey','列族:列’來查看rowKey列族的某個(gè)列記錄
5.Hbase刪除數(shù)據(jù)的語法格式如下:
通過命令:delete ‘表名’,‘行名’,‘列族:列' 來刪除某個(gè)記錄
6. get來查詢刪除的記錄是否刪除成功:
? ? ? ? ? ? ? ? ? ? ? ?get?‘表名’,‘行名’,‘列族:列'
7.deleteall '表名','rowkey' 來刪除整行記錄
8.? ? ??scan ’表名‘??來查看整個(gè)表的記錄來看是否刪除成功:
9.truncate '表名'? 來清空表所有的記錄
10.Hbase更新數(shù)據(jù)的語法格式如下:
通過命令:put就是重寫一遍现柠,進(jìn)行覆蓋弛矛,hbase沒有修改,都是追加即對(duì)相同rowKey丈氓、列族和時(shí)間戳的數(shù)據(jù)再次添加即為數(shù)據(jù)的更新
? ? ? ?比如:put ‘user’,’1234’,’info1:name’,’zhangsan’
三:Hbase 刪除數(shù)據(jù)庫表
1.Hbase 刪除數(shù)據(jù)庫的語法格式如下(drop '表名'):
? ??在刪除表時(shí),先要屏蔽該表万俗,才能對(duì)該表進(jìn)行刪除
????第一步: disable ‘表名’,第二步 :drop '表名'
2.?Disable 表后可以通過命令:is_enabled '表名'嚎研,查看當(dāng)前表是否可用
3.false(不可用)课竣。 通過drop命令對(duì)表進(jìn)行刪除:
4.最后用list命令查看user是否已被成功刪除:
四:過濾器
使用過濾器的語法格式如下所示:
scan '表名'置媳,{Filter => ”過濾器(比較運(yùn)算符,’比較器’)”}
1.行鍵過濾器
(1)RowFilter:針對(duì)行鍵進(jìn)行過濾
? ? ? ? ?例1:顯示行鍵前綴為0開頭的鍵值對(duì)公条;
? ? ? ? ?scan'student',{FILTER=>"RowFilter(=,'substring:001')"}
(2)PrefixFilter:行鍵前綴過濾器
? ? ? ? ?例2:掃描前綴為001的行鍵
? ? ? ? ?scan'student',FILTER=>"PrefixFilter('001')"
(3)FirstKeyOnlyFilter:掃描全表迂曲,顯示每個(gè)邏輯行的第一個(gè)鍵值對(duì)
? ? ? ? ?例4:scan 'student',FILTER=>"FirstKeyOnlyFilter()"
(4)InclusiveStopFilter:替代ENDROW返回終止條件行;
? ? ? ? ?例5:掃描顯示行鍵001到002范圍內(nèi)的鍵值對(duì)
? ? ? ? ?scan 'student', {STARTROW=>'001',FILTER =>"InclusiveStopFilter('002')"}
? ? ? ? ?此條命令等同于:
? ? ? ? ?scan 'student', {STARTROW=>'001',ENDROW => '003'}
2.列族與列過濾器
(1)FamilyFilter:針對(duì)列族進(jìn)行比較和過濾路捧。
? ? ? ? ?例1:顯示列族前綴為stu開頭的鍵值對(duì);
? ??????scan'student',FILTER=>"FamilyFilter(=,'substring:stu’)”
(2)QualifierFilter:列標(biāo)識(shí)過濾器队寇。
? ? ? ? ?例2:顯示列名為name的記錄;? ? ? ? ? ? ? ? ? ?????????scan'student',FILTER=>"QualifierFilter(=,'substring:name')"
(3)ColumnPrefixFilter:對(duì)列名前綴進(jìn)行過濾佳遣。
? ? ? ? ?例2:顯示列名為name的記錄;
? ? ? ? ? ? ? ? ? ? scan'student',FILTER=>"ColumnPrefixFilter('name’)”
? ? ? ? ?等價(jià)于scan'student',FILTER=>"QualifierFilter(=,'substring:name')"
(4)MultipleColumnPrefixFilter:可以指定多個(gè)前綴
? ? ? ? ?例3:顯示列名為name和age的記錄零渐;
? ? ? ? ?scan 'student',FILTER=>"MultipleColumnPrefixFilter('name','age')"
(5)ColumnRangeFilter :設(shè)置范圍按字典序?qū)α忻M(jìn)行過濾系忙;?scan'student',FILTER=>"ColumnRangeFilter('bi',true,'na',true)"
3.值過濾器
(1)ValueFilter :值過濾器。
例1:查詢值等于19的所有鍵值對(duì)
scan'student',FILTER=>"ValueFilter(=,'binary:19') " scan'student',FILTER=>"ValueFilter(=,'substring:19')
(2)SingleColumnValueFilter :在指定的列族和列中進(jìn)行值過濾器银还。
例2:查詢stuinfo列族age列中值等于19的所有鍵值對(duì)
scan'student',{COLUMN=>'stuinfo:age',FILTER=>"SingleColumnValueFilter('stuinfo','age',=,'binary:19')"}
4.其他過濾器
(1)ColumnCountGetFilter :限制每個(gè)邏輯行返回的鍵值對(duì)數(shù)
例1:返回行鍵為001的前3個(gè)鍵值對(duì)
get 'student','001',FILTER=>"ColumnCountGetFilter(3)"
(2)PageFilter:基于行的分頁過濾器,設(shè)置返回行數(shù)蛹疯。
例2:顯示一行
scan'student',FILTER=>"PageFilter(1)"
(3)ColumnPaginationFilter:基于列的進(jìn)行分頁過濾器,需要設(shè)置偏移量與返回?cái)?shù)量 苍苞。
例3:顯示每行第1列之后的2個(gè)鍵值對(duì)scan'student',FILTER=>"ColumnPaginationFilter(2,1)"
五:例題
(1) 啟動(dòng)HBase? ??
cd /opt/hbase-1.2.6/bin/? ? 進(jìn)入hbase安裝的bin目錄下
./start-hbase.sh
(2) 連接HBase實(shí)例
hbase shell
(3) 查看存在哪些表
list
(4) 創(chuàng)造表people,表中有列簇info
create 'people','info'
(5)? 向people表的列族info中添加數(shù)據(jù)(數(shù)據(jù)根據(jù)上表內(nèi)容填寫)
put ‘people’,’1001’,’info:name’,’jenny’
put ‘people’,’1002’,’info:name’,’sam’
put ‘people’,’1002’,’info:age’,’20’
(6)? people表添加一個(gè)列簇salary
alter 'people','salary'
(7)? 查看people表結(jié)構(gòu)
describe 'people'
(8)? 向people表的列族salary中添加數(shù)據(jù)羹呵,并且base列的版本號(hào)(時(shí)間戳)都自定義為“1”(數(shù)據(jù)根據(jù)上表內(nèi)容填寫)
put ‘people’,’1001’,’salary:base’,’2000’,1
put ‘people’,’1002’,’salary:base’,’1300’,1
put ‘people’,’1002’,’salary:subsidy’,’500’
(9)? 修改行鍵1002的列族salary的base列的值為1800,版本號(hào)為“2”
put ‘people’,’1002’,’salary:base’,’1800’,2
(10)? 查看people表的所有的數(shù)據(jù)
scan 'people'
(11)? 查看行鍵1002的列族salary的base列的版本號(hào)為1的值
get ‘people’,’1002’,{COLUMN=>’salary:base’,TIMESTAMP=>1}
(12)? 使用“FamilyFilter”過濾器顯示列族前綴為“sa”開頭的鍵值對(duì)
scan ‘people’,FILTER=>”FamilyFilter(=,'substring:sa’)”
(13)? 使用“RowFilter”過濾器顯示行鍵等于1001的鍵值對(duì)
scan ‘people’,FILTER=>"RowFilter(=,'binary:1001')"
(14)? 使用“ValueFilter”過濾器查詢base值大于等于2000的所有鍵值對(duì)
scan 'people',FILTER=>"ColumnPrefixFilter('base') AND ValueFilter(>=,'binary:2000') "
(15)? 刪除行鍵為1002歉铝,列族為info,列為age的數(shù)據(jù)
delete ‘people’,’1002’,’info:age’
(16)? 清空表people
truncate 'people'
(17)? 刪除表
drop ‘people’