设为首页收藏本站

小牛社区-大数据学习交流社区|大数据免费学习资源

 找回密码
 立即注册!

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 751|回复: 1

hbase查询,scan详解

[复制链接]

3203

主题

3533

帖子

1万

积分

管理员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
14297
发表于 2016-6-4 23:33:10 | 显示全部楼层 |阅读模式
一、shell 查询


hbase 查询相当简单,提供了get和scan两种方式,也不存在多表联合查询的问题。复杂查询需通过hive创建相应外部表,用sql语句自动生成mapreduce进行。
但是这种简单,有时为了达到目的,也不是那么顺手。至少和sql查询方式相差较大。
hbase 提供了很多过滤器,可对行键,列,值进行过滤。过滤方式可以是子串,二进制,前缀,正则比较等。条件可以是AND,OR等 组合。所以通过过滤,还是能满足需求,找到正确的结果的。
1.1 过滤器类型

HBase 最新官方文档中文版(http://abloz.com/hbase/book.html)中有对过滤器的描述。过滤器分为5种类型:

  • 构造型过滤器:用于包含其他一组过滤器的过滤器。包括:FilterList
  • 列值型过滤器:对每列的值进行过滤的. 相当于sql查询中的=和like 包括:
    1. SingleColumnValueFilter
    复制代码
    1. 比较器,包括:RegexStringComparator 支持值比较的正则表达式SubstringComparator 用于检测一个子串是否存在于值中。大小写不敏感。 BinaryPrefixComparator 二进制前缀比较BinaryComparator 二进制比较
    复制代码
  • 键值元数据过滤器:用于对列进行过滤的。包括:
    1. FamilyFilter 用于过滤列族。 通常,在Scan中选择ColumnFamilie优于在过滤器中做。QualifierFilter 用于基于列名(即 Qualifier)过滤.ColumnPrefixFilter 可基于列名(即Qualifier)前缀过滤。MultipleColumnPrefixFilter 和 ColumnPrefixFilter 行为差不多,但可以指定多个前缀。ColumnRangeFilter 可以进行高效内部扫描。  
    复制代码

  • Rowkey:对行键进行过滤。通常认为行选择时Scan采用 startRow/stopRow 方法比较好。然而 RowFilter 也可以用。
  • 工具:如FirstKeyOnlyFilter用于统计行数。
二、示例


1.FirstKeyOnlyFilter,一种方便的计算行数的过滤器
  1. hbase(main):002:0> scan 'toplist_ware_ios_1009_201231',{COLUMNS=>'info',FILTER=>"(FirstKeyOnlyFilter())"}0000000001                       column=info:loginid, timestamp=1343625459713, value=jjm1681310130000000002                       column=info:loginid, timestamp=1343625459713, value=loveswh...21 row(s) in 0.5480 seconds
复制代码
2.列名子串进行过滤
  1. 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=jjm1681310130000000001 column=info:userid, timestamp=1343625459713, value=1681310130000000002 column=info:loginid, timestamp=1343625459713, value=loveswh0000000002 column=info:userid, timestamp=1343625459713, value=100898152hbase(main):005:0> scan 'toplist_ware_ios_1009_201231',{COLUMNS=>['info:loginid'],FILTER=>"(QualifierFilter(=,'substring:id'))"}ROW COLUMN+CELL0000000001 column=info:loginid, timestamp=1343625459713, value=jjm1681310130000000002 column=info:loginid, timestamp=1343625459713, value=loveswhhbase(main):007:0> scan 'toplist_ware_ios_1009_201231',{COLUMNS=>['info:'],FILTER=>"(QualifierFilter(=,'substring:nid'))"}ROW COLUMN+CELL0000000001 column=info:loginid, timestamp=1343625459713, value=jjm1681310130000000002 column=info:loginid, timestamp=1343625459713, value=loveswhhbase(main):008:0> scan 'toplist_ware_ios_1009_201231',{COLUMNS=>['info:'],FILTER=>"(QualifierFilter(=,'substring:nick'))"}ROW COLUMN+CELL0000000001 column=info:nick, timestamp=1343625459713, value=\xE5\xAE\xB6\xE6\x9C\x89\xE8\x99\x8E\xE5\xAE\x9D0000000002 column=info:nick, timestamp=1343625459713, value=loveswh08
复制代码
3.Value 过滤
  1. 3.1 正则过滤hbase(main):004:0> scan 'toplist_ware_ios_1009_201231',{COLUMNS=>'info',FILTER=>"(SingleColumnValueFilter('info','nick',=,'regexstring:.*99',true,true))"}ROW                               COLUMN+CELL0000000009                       column=info:loginid, timestamp=1343625459713, value=zgh19680000000009                       column=info:nick, timestamp=1343625459713, value=zwy990000000009                       column=info:score, timestamp=1343625459713, value=50000000009                       column=info:userid, timestamp=1343625459713, value=1003662621 row(s) in 0.2520 seconds3.2 子串需导入import org.apache.hadoop.hbase.filter.CompareFilterimport org.apache.hadoop.hbase.filter.SingleColumnValueFilterimport org.apache.hadoop.hbase.filter.SubstringComparatorimport org.apache.hadoop.hbase.util.Byteshbase(main):028:0> scan 'toplist_ware_ios_1001_201231',{COLUMNS =>'info:nick', FILTER=>SingleColumnValueFilter.new(Bytes.toBytes('info'),Bytes.toBytes('nick'),CompareFilter::CompareOp.valueOf('EQUAL'),SubstringComparator.new('8888'))}ROW COLUMN+CELL0000000002 column=info:nick, timestamp=1343625446556, value=\xE7\x81\x8F????\xE3\x81\x8A??88881 row(s) in 0.0330 seconds3.3 二进制子串等不支持多字节文字,所以用二进制来进行比较hbase(main):010: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=7789\xE6\xB4\x811 row(s) in 0.1710 seconds
复制代码
4 综合列名子串和值二进制比较
  1. 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=7789\xE6\xB4\x811 row(s) in 0.0120 seconds
复制代码
  1. hbase(main):014:0> scan 'toplist_ware_ios_1009_201231',{COLUMNS=>"info:",FILTER=>"(PrefixFilter('000000002')) AND (QualifierFilter(=,'substring:nick')"}ROW COLUMN+CELL0000000020 column=info:nick, timestamp=1343625459713, value=Denny_feng0000000021 column=info:nick, timestamp=1343625459713, value=\xE5\xB0\x8F\xE7\xBD\x97\xE6\x95\x99\xE7\xBB\x8312 row(s) in 0.0440 seconds
复制代码
5. 行查询

  1. hbase(main):005:0> get 'toplist_ware_ios_1009_201231','0000000009'COLUMN CELLinfo:loginid timestamp=1343625459713, value=zgh1968info:nick timestamp=1343625459713, value=zwy99info:score timestamp=1343625459713, value=5info:userid timestamp=1343625459713, value=1003662624 row(s) in 0.1000 seconds
复制代码
  1. hbase(main):006:0> get 'toplist_ware_ios_1009_201231','0000000009','info:nick'COLUMN CELLinfo:nick timestamp=1343625459713, value=zwy991 row(s) in 0.0100 seconds
复制代码
  1. 比较器,包括:RegexStringComparator 支持值比较的正则表达式SubstringComparator 用于检测一个子串是否存在于值中。大小写不敏感。 BinaryPrefixComparator 二进制前缀比较BinaryComparator 二进制比较0
复制代码
  1. 比较器,包括:RegexStringComparator 支持值比较的正则表达式SubstringComparator 用于检测一个子串是否存在于值中。大小写不敏感。 BinaryPrefixComparator 二进制前缀比较BinaryComparator 二进制比较1
复制代码
  1. 比较器,包括:RegexStringComparator 支持值比较的正则表达式SubstringComparator 用于检测一个子串是否存在于值中。大小写不敏感。 BinaryPrefixComparator 二进制前缀比较BinaryComparator 二进制比较2
复制代码
回复

使用道具 举报

0

主题

5

帖子

19

积分

吃土小白

Rank: 1

积分
19
发表于 2016-8-5 12:02:33 | 显示全部楼层
真不知道,还有这么好心的楼主 支持












88mt.com
foshansangna.info
gzsnw.info
3asn.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册!

本版积分规则

快速回复 返回顶部 返回列表