首页 > 代码库 > hbase查询,scan详解
hbase查询,scan详解
一、shell 查询
hbase 查询相当简单,提供了get和scan两种方式,也不存在多表联合查询的问题。复杂查询需通过hive创建相应外部表,用sql语句自动生成mapreduce进行。
但是这种简单,有时为了达到目的,也不是那么顺手。至少和sql查询方式相差较大。
hbase 提供了很多过滤器,可对行键,列,值进行过滤。过滤方式可以是子串,二进制,前缀,正则比较等。条件可以是AND,OR等 组合。所以通过过滤,还是能满足需求,找到正确的结果的。
1.1 过滤器类型
HBase 最新官方文档中文版(http://abloz.com/hbase/book.html)中有对过滤器的描述。过滤器分为5种类型:
- 构造型过滤器:用于包含其他一组过滤器的过滤器。包括:FilterList
- 列值型过滤器:对每列的值进行过滤的. 相当于sql查询中的=和like 包括:
SingleColumnValueFilter
比较器,包括:RegexStringComparator 支持值比较的正则表达式SubstringComparator 用于检测一个子串是否存在于值中。大小写不敏感。 BinaryPrefixComparator 二进制前缀比较BinaryComparator 二进制比较
- 键值元数据过滤器:用于对列进行过滤的。包括:
FamilyFilter 用于过滤列族。 通常,在Scan中选择ColumnFamilie优于在过滤器中做。QualifierFilter 用于基于列名(即 Qualifier)过滤.ColumnPrefixFilter 可基于列名(即Qualifier)前缀过滤。MultipleColumnPrefixFilter 和 ColumnPrefixFilter 行为差不多,但可以指定多个前缀。ColumnRangeFilter 可以进行高效内部扫描。
- Rowkey:对行键进行过滤。通常认为行选择时Scan采用 startRow/stopRow 方法比较好。然而 RowFilter 也可以用。
- 工具:如FirstKeyOnlyFilter用于统计行数。
二、示例
1.FirstKeyOnlyFilter,一种方便的计算行数的过滤器
hbase(main):002:0> scan ‘toplist_ware_ios_1009_201231‘,{COLUMNS=>‘info‘,FILTER=>"(FirstKeyOnlyFilter())"} 0000000001 column=info:loginid, timestamp=1343625459713, value=http://www.mamicode.com/jjm168131013>2.列名子串进行过滤
hbase(main):006:0> scan ‘toplist_ware_ios_1009_201231‘,{COLUMNS=>[‘info:‘],FILTER=>"(QualifierFilter(=,‘substring:id‘))"}ROW COLUMN+CELL0000000001 column=info:loginid, timestamp=1343625459713, value=http://www.mamicode.com/jjm168131013"(QualifierFilter(=,‘substring:id‘))"}ROW COLUMN+CELL0000000001 column=info:loginid, timestamp=1343625459713, value=http://www.mamicode.com/jjm168131013"(QualifierFilter(=,‘substring:nid‘))"}ROW COLUMN+CELL0000000001 column=info:loginid, timestamp=1343625459713, value=http://www.mamicode.com/jjm168131013"(QualifierFilter(=,‘substring:nick‘))"}ROW COLUMN+CELL0000000001 column=info:nick, timestamp=1343625459713, value=http://www.mamicode.com/xE5/xAE/xB6/xE6/x9C/x89/xE8/x99/x8E/xE5/xAE/x9>3.Value 过滤
3.1 正则过滤hbase(main):004:0> scan ‘toplist_ware_ios_1009_201231‘,{COLUMNS=>‘info‘,FILTER=>"(SingleColumnValueFilter(‘info‘,‘nick‘,=,‘regexstring:.*99‘,true,true))"}ROW COLUMN+CELL 0000000009 column=info:loginid, timestamp=1343625459713, value=http://www.mamicode.com/zgh1968"(QualifierFilter(=,‘substring:nick‘) AND ValueFilter(=,‘binary:7789\xE6\xB4\x81‘) )"}ROW COLUMN+CELL0000000016 column=info:nick, timestamp=1343625459713, value=http://www.mamicode.com/7789/xE6/xB4/x81>4 综合列名子串和值二进制比较
hbase(main):012:0> scan ‘toplist_ware_ios_1009_201231‘,{COLUMNS=>[‘info:‘],FILTER=>"(QualifierFilter(=,‘substring:nick‘) AND ValueFilter(=,‘binary:7789\xE6\xB4\x81‘) )"}ROW COLUMN+CELL0000000016 column=info:nick, timestamp=1343625459713, value=http://www.mamicode.com/7789/xE6/xB4/x81>hbase(main):014:0> scan ‘toplist_ware_ios_1009_201231‘,{COLUMNS=>"info:",FILTER=>"(PrefixFilter(‘000000002‘)) AND (QualifierFilter(=,‘substring:nick‘)"}ROW COLUMN+CELL 0000000020 column=info:nick, timestamp=1343625459713, value=http://www.mamicode.com/Denny_feng>5. 行查询
hbase(main):005:0> get ‘toplist_ware_ios_1009_201231‘,‘0000000009‘COLUMN CELL info:loginid timestamp=1343625459713, value=http://www.mamicode.com/zgh1968>hbase(main):006:0> get ‘toplist_ware_ios_1009_201231‘,‘0000000009‘,‘info:nick‘COLUMN CELL info:nick timestamp=1343625459713, value=http://www.mamicode.com/zwy99>hbase(main):009:0> scan ‘toplist_ware_ios_1009_201231‘,FILTER=>"PrefixFilter(‘000000002‘)"ROW COLUMN+CELL 0000000020 column=info:loginid, timestamp=1343625459713, value=http://www.mamicode.com/jjm169212318>hbase(main):010:0> scan ‘toplist_ware_ios_1009_201231‘,FILTER=>"PrefixFilter(‘000000002‘)",LIMIT=>1ROW COLUMN+CELL 0000000020 column=info:loginid, timestamp=1343625459713, value=http://www.mamicode.com/jjm169212318>hbase(main):011:0> scan ‘toplist_ware_ios_1009_201231‘,{COLUMNS=>"info:nick",FILTER=>"PrefixFilter(‘000000002‘)",LIMIT=>1}ROW COLUMN+CELL 0000000020 column=info:nick, timestamp=1343625459713, value=http://www.mamicode.com/Denny_feng>hbase查询,scan详解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。