HBase Shell操作整理
- 一、基本操作
- 二、庫的操作
- 三、表的操作
- 四、查詢資料
一、基本操作
- 進入HBase用戶端:hbase shell
- 檢視幫助指令:help
- 檢視目前資料庫中有哪些表:list
- 檢視目前使用者:whoami
二、庫的操作
hbase裡的資料庫叫namespace,一個namespace下面有多個表
- 檢視命名空間:list_namespace
- 建立命名空間:create_namespace ‘kb10’
- 删除命名空間:drop_namespace ‘kb10’
三、表的操作
- 表操作冒号是引用符
- 列出目前命名空間的所有表:list_namespace_tables ‘kb10’#
- 列出所有表:list
- 檢視表的資訊:status desc ‘NAMESPACE:TABLE’
- 啟用或禁用列簇:enable/disable ‘NAMESPACE:TABLE’
- 檢視列簇的狀态:is_disable/is_enable ‘NAMESPACE:TABLE’
-
建立列簇:create ‘kb10:student’,‘basicinfo’,‘stuinfo’#建立一張表,列簇為basicinfo和stuinfo
建立完之後,可在HDFS裡hbase/data下檢視表檔案目錄
- 删除表,删除前要把表裡的列簇禁用掉:drop ‘NAMESPACE:TABLE’
- 添加資料:put ‘NAMESPACE:TABLE’,‘rowkey值’,‘列簇名:列名’,‘值’
- 把資料寫入磁盤:flush ‘NAMESPACE:TABLE’ 。在put資料後,可以看到HDFS系統裡并沒有添加任何資料,可以說明寫入的過程是寫在記憶體裡的,而在flush之後,HDFS裡便有了資料。
- 掃描全表資料:scan ‘NAMESPACE:TABLE’
- 掃描特定列的資料:scan ‘kb10:student’,{COLUMNS=>[‘basicinfo:name’],VERSIONS=>3}
- 擷取指定cell的資料:get ‘NAMESPACE:TABLE’,‘FAMILY:COLUMN’ 列簇目錄下的檔案,可以使用hdfs指令檢視内容:hbase hfile -v -p -f file_path
- 檢視表結構:desc ‘NAMESPACE:TABLE_NAME’
- 更新指定字段的資料 put ‘customer’, ‘jsmith’, ‘order:numb’, ‘654321’
-
檢視“指定行”或“指定列族:列”的資料
get ‘customer’, ‘jsmith’
get ‘customer’, ‘jsmith’,‘addr’
get ‘customer’, ‘jsmith’,‘addr:city’
- 統計表資料行數 count ‘customer’
- 清空表資料 truncate ‘customer’
- 删除某 rowkey 的全部資料 deleteall ‘customer’,‘jsmith’
- 删除某 rowkey 的某一列資料: delete ‘customer’,‘njones’,‘addr:city’
四、查詢資料
-
查詢前十條資料
例:scan ‘book:info’,{LIMIT=>10}
-
查詢前十條c:q列的資料
例:scan ‘book:info’,{COLUMNS=>‘c:q’,LIMIT=>10}
-
查詢rowkey從’1000’到’2000’,列族為c:q的資料
例:scan ‘book:info’,{STARTROW=>‘1000’,ENDROW=>‘2000’,COLUMN=>‘c:q’}’’
-
PrefixFilter:rowkey 字首過濾。ps查詢rowkey字首為100的資料
例:scan ‘book:info’,{FILTER=>“PrifixFilter(‘100’)”}
-
查詢rowkey中包括0778的資料
例:scan ‘book:info’,{FILTER=>“RowFilter(=,‘substring:0778’)”,LIMIT=>10}
-
QualifierFilter(CompareFilter.Compare op, ByteArrayComparable qualifierComparator)
QualifierFilter按照列的名稱過濾。
例:scan ‘book:info’,{FILTER=>“PrefixFilter(‘100’) AND QualifierFilter(=,‘regexstring:q’)”}
-
ColumnPrefixFilter(byte[] prefix) 注意:一個列名是可以出現在多個列族中,該過濾器将傳回所有列族中比對的列
===(與上一句的查詢結果一樣)
例:scan ‘book:info’,{FILTER=>“PrefixFilter(‘100’) AND ColumnPrefixFilter(‘q’)”}
-
MultipleColumnPrefixFilter 基于多個列名字首過濾資料
例:scan ‘book:info’,{FILTER=>“MultipleColumnPrefixFilter(‘q1’,‘q2’,‘q3’)”,LIMIT=>10}
-
ColumnRangeFilter(byte[] minColumn,boolean minColumnclusive,byte[] maxColumn,boolean maxColumnInclusive)
minColumn -列範圍的最小值,如果為空,則沒有下限
minColumnInclusive -列範圍是否包含minColumn
maxColumn -列範圍的最大值,如果為空,則沒有上限
maxColumnInclusive -列範圍是否包含maxColumn
例:scan ‘book:info’ {FILTER=>“ColumnRangeFilter(‘q’,true,‘q4’,false)”,LIMIT=>10}
-
SingleColumnValueFilter(byte[] family,byte[] qualifier, CompareFilter.CompareOp, compareOp, ByteArrayComparable comparator) 比較列的關鍵字查詢
例:scan ‘book:info’,{FILTER=>“SingleColumnValueFilter(‘c’,‘q1’,=,‘substring:1’)”,LIMIT=>10}
-
FirstKeyOnlyFilter()函數每一行的第一個cell的值,可以用于高效的執行統計行數,但具體作用總覺得不大。
例:scan ‘book:info’,{FILTER=>“FirstKeyOnlyFilter()”,LIMIT=>10}