转载:https://www.cnblogs.com/hyl8218/p/10058873.html
一、scan filter使用
比较器:
前面例子中的regexstring:2014-11-08.*、binary:x00x00x00x05,这都是比较器。HBase的filter有四种比较器:
(1)二进制比较器:如’binary:abc’,按字典排序跟’abc’进行比较
(2)二进制前缀比较器:如’binaryprefix:abc’,按字典顺序只跟’abc’比较前3个字符
(3)正则表达式比较器:如’regexstring:ab*yz’,按正则表达式匹配以ab开头,以yz结尾的值。这个比较器只能使用=、!=两个比较运算符。
(4)子串比较器:如’substring:abc123’,匹配以abc123开头的值。这个比较顺也只能使用=、!=两个比较运算符。
比较运算符:
HBase的filter中有7个比较运算符
1. LESS (<)
2. LESS_OR_EQUAL (<=)
3. EQUAL (=)
4. NOT_EQUAL (!=)
5. GREATER_OR_EQUAL (>=)
6. GREATER (>)
7. NO_OP (no operation)(不知道这个怎么用)
如果需要再bash直接执行查询,可以使用一下方式
echo "scan 'testByCrq', FILTER=>"ValueFilter(=,'substring:111')"" | hbase shell
常用语法举例:
habse shell
scan '表名', FILTER=>"RowFilter(=,'substring:333')" #通过rowkey过滤,匹配出rowkey含333的数据
scan '表名', FILTER=>"RowFilter(=,'binary:4546546')" #通过rowkey过滤,匹配出rowkey等于4546546的数据
scan '表名', FILTER=>"RowFilter(<=,'binary:5657657657888')" #通过rowkey过滤,匹配出rowkey小于等于5657657657888的数
scan '表名', FILTER=>"ValueFilter(=,'substring:555')" #通过value过滤,匹配出value含555的数据
scan '表名', FILTER=>"FamilyFilter(=,'substring:ferer')" #通过列簇过滤,匹配出列簇含ferer的数据
二、命名空间namespace:
- hbase:系统内建表,包括namespace和meta表
- default:用户建表时未指定namespace的表都创建在此
create_namespace 'test' #创建namespace
drop_namespace 'test' #删除namespace
list_namespace #列出所有namespace
create 'test:test_table', 'fm1','fm2','fmN' #在namespace下创建表
list_namespace_tables 'test' #查看namespace下的表
grant 'test_user' 'W' '@test' #授权test_user对test命名空间有写权限
revoke 'test_user''@test' #回收test_user对test命名空间的权限