1. 程式人生 > >HBase shell scan 模糊查詢

HBase shell scan 模糊查詢

0.進入hbase shell

./hbase shell 
help 
help “get” #檢視單獨的某個命令的幫助

1. 一般命令

  1. status 檢視狀態
  2. version 檢視版本

2.DDL(資料定義語言Data Definition Language)命令

1. 建立表

create ‘表名稱’,’列名稱1’,’列名稱2’,’列名稱3’ 
如:

create 'member','member_id','address','info'

2.列出所有的表

list 
這裡寫圖片描述

list ‘abc.*’ #顯示abc開頭的表

3.獲得表的描述

describe ‘table_name’ 
這裡寫圖片描述

這裡寫圖片描述

Table play_error_file is ENABLEDplay_error_filecolumn families description{NAME => 'cf',BLOOMFILTER => 'ROW',#根據應用來定,看需要精確到rowkey還是column。bloom filter的作用是對一個region下查詢記錄所在的hfile有用。一個region下hfile數量越多,bloom filter的作用越明顯。適合那種compaction(壓縮)趕不上flush速度的應用。VERSIONS => '1',# 通常是3,對於更新比較頻繁的應用可以設定為1IN_MEMORY => 'false',KEEP_DELETED_CELLS => 'FALSE',DATA_BLOCK_ENCODING => 'NONE',TTL => 'FOREVER',COMPRESSION => 'NONE',MIN_VERSIONS => '0',BLOCKCACHE =>'true',BLOCKSIZE => '65536',REPLICATION_SCOPE => '0'}

4.刪除一個列族 alter,disable, enable

disable 'member'  #刪除列族時必須先將表給disablealter 'member',{NAME=>'member_id',METHOD=>'delete'}#刪除後繼續enable 'member'enable 'member'

5.刪除表

disable 'table_name'drop 'table_name'

6.查詢表是否存在

exists 'table_name'

7.判斷表是否enabled

is_enabled 'table_name'

3.DML(data manipulation language)操作

1.插入

這裡寫圖片描述
在ns1:t1或者t1表裡的r1行,c1列中插入值,ts1是時間

put 'ns1:t1', 'r1','c1','value'orput 't1','r1','c1','value'orput 't1','r1','c1','value',ts1orput 't1','r1','c1','value',{ATTRIBUTES=>{'mykey'=>'myvalue'}}put 't1','r1','c1','value',ts1,{ATTRIBUTES=>{'mykey'=>'myvalue'}}put 't1','r1','c1','value',ts1,{VISIBILITY=>'PRIVATE|SECRET}# t是table 't1'表的引用t.put 'r1','c1','value',ts1,{ATTRIBUTES=>{'mykey'=>'myvalue'}}put 'table_name','row_index','info:age','24'put 'table_name','row_index','info:birthday','1987-06-17'put 'table_name','row_index','info:company','tencent'put 'table_name','row_index','address:contry','china'put 'table_name','row_index','address:province','china'put 'table_name','row_index','address:city','shenzhen'

2.獲取一條資料

這裡寫圖片描述

# 獲取一個id的所有資料get 'table_name','row_index'# 獲取一個id,一個列族的所有資料get 'table_name','row_index','info'# 獲取一個id,一個列族中一個列的所有資料get 'table_name','row_index','info:age'

3.更新一條記錄

將qy的單位改為qq 
put ‘table_name’,’qy’,’info:company’,’qq’

4.通過timestrap來獲取兩個版本的資料

# 得到company為tencent的記錄get 'table_name','qy',{COLUMN=>'info:company',TIMESTRAP=>1321586238965}# 得到company為qq的資料get 'table_name','qy',{COLUMN=>'info:company',TIMESTRAP=>1321586271843}

5.全表掃描

這裡寫圖片描述
這裡寫圖片描述 
scanner規範: 
TIMERANGE, 
FILTER, 
LIMIT, 
STARTROW(start row), 
STOPROW(stop row), 
ROWPREFIXFILTER(row prefix filter,行字首) 
TIMESTAMP, 
MAXLENGTH, 
or COLUMNS, 
CACHE, 
or RAW, 
VERSIONS

scan 'hbase:meta'scan 'hbase:meta',{COLUMNS => 'info:regioninfo'}scan 'ns1:t1',{COLUMNS=>['c1','c2'],LIMIT=>10,STARTROW=>'xyz'}scan 't1',{COLUMNS=>'c1',TIMERANGE=>[1303668804,1303668904]}scan 't1',{REVERSED=>true}scan 't1',{    ROWPREFIXFILTER=>'row2',    FILTER=>"(QualifierFilter(>=,'binary:xyz'))     AND (TimestampsFilter(123,456))"}scan 't1',{FILTER => org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1,0)}scan 't1',{CONSISTENCY=>'TIMELINE'}設定操作屬性:scan 't1',{COLUMNS => ['c1','c2'],ATTRIBUTES=>{'mykey'=>'myvalue'}}scan 't1',{COLUMNS=>['c1','c2'],AUTHORIZATIONS=>['PRIVATE','SECRET']}有個額外的選項:CACHE_BLOCKS,預設為true還有個選項:RAW,返回所有cells(包括刪除的markers和uncollected deleted cells,不能用來選擇特定的columns,預設為default)如:scan 't1',{RAW=>true,VERSIONS=>10}

全表掃描一般不會用,資料量大的時候會死人的。。

6.刪除記錄

這裡寫圖片描述

# 刪除id為temp的記錄的'info:age'欄位delete 'member','temp','info:age'# 刪除整行deleteall 'member','temp'

7.查詢表中有多少行

count 'table_name'or有對錶t1的引用tt.count

8.清空表

truncate 'table_name'HBase是先將表disable,再drop the table,最後creating table。

5.scan查詢

1.限制條件

scan ‘qy’,{COLUMNS=>’name’}

這裡寫圖片描述

scan ‘qy’,{COLUMNS=>’name:gender’}

這裡寫圖片描述

scan ‘qy’,{COLUMNS=>[‘name’,’foo’]}

這裡寫圖片描述

限制查詢條數:

scan ‘qy’,{COLUMNS=>[‘name’,’foo’],LIMIT=>1} 
scan ‘qy’,{COLUMNS=>[‘name’,’foo’],LIMIT=>2}

這裡寫圖片描述

限制時間範圍:

scan ‘qy’,{TIMERANGE=>[1448045892646,1448045892647]}

這裡寫圖片描述

2.filter 過濾部分

PrefixFilter:rowKey字首過濾

scan ‘qy’,{FILTER=>”PrefixFilter(‘001’)”}

這裡寫圖片描述

scan ‘qy’,{FILTER=>PrefixFilter(‘t’)}

這裡寫圖片描述

QualifierFilter:列過濾器

QualifierFilter對列的名稱進行過濾,而不是列的值。

scan ‘qy’,{FILTER=>”PrefixFilter(‘t’) AND QualifierFilter(>=,’binary:b’)”}

這裡寫圖片描述

TimestampsFilter:時間戳過濾器

scan ‘qy’,{FILTER=>”TimestampsFilter(1448069941270,1548069941230)” }

這裡寫圖片描述

scan ‘qy’,{FILTER=>”(QualifierFilter(>=,’binary:b’)) AND (TimestampsFilter(1348069941270,1548069941270))” }

這裡寫圖片描述

ColumnPaginationFilter

scan ‘qy’,{FILTER=>org.apache.hbase.filter.ColumnPaginationFilter.new(2,0)}

cannot load Java class org.apache.hbase.filter.ColumnPaginationFilter

hbase shell應用filter 
1.匯入需要的類

import org.apache.hadoop.hbase.filter.CompareFilterimport org.apache.hadoop.hbase.filter.SingleColumnValueFilterimport org.apache.hadoop.hbase.filter.SubstringComparatorimport org.apache.hadoop.hbase.util.Bytes

2.執行命令

scan 'tablename',STARTROW=>'start',COLUMNS=>['family:qualifier'],FILTER=>SingleColumnValueFilter.new(Bytes.toBytes('family'),Bytes.toBytes('qualifier'))