`
liangjian103
  • 浏览: 177480 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hbase的内容查询(1)

 
阅读更多

一、shell 查询

hbase 查询相当简单,提供了get和scan两种方式,也不存在多表联合查询的问题。复杂查询需通过hive创建相应外部表,用sql语句自动生成mapreduce进行。
但是这种简单,有时为了达到目的,也不是那么顺手。至少和sql查询方式相差较大。

hbase 提供了很多过滤器,可对行键,列,值进行过滤。过滤方式可以是子串,二进制,前缀,正则比较等。条件可以是AND,OR等 组合。所以通过过滤,还是能满足需求,找到正确的结果的。

1.1 过滤器类型

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

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

     

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

二、示例

 

1.FirstKeyOnlyFilter,一种方便的计算行数的过滤器

hbase(main):002:0> scan 'toplist_ware_ios_1009_201231',{COLUMNS=>'info',FILTER=>"(FirstKeyOnlyFilter())"}
 0000000001                       column=info:loginid, timestamp=1343625459713, value=jjm168131013
 0000000002                       column=info:loginid, timestamp=1343625459713, value=loveswh
...
21 row(s) in 0.5480 seconds

2.列名子串进行过滤

hbase(main):006:0> scan 'toplist_ware_ios_1009_201231',{COLUMNS=>['info:'],FILTER=>"(QualifierFilter(=,'substring:id'))"}
ROW COLUMN+CELL
0000000001 column=info:loginid, timestamp=1343625459713, value=jjm168131013
0000000001 column=info:userid, timestamp=1343625459713, value=168131013
0000000002 column=info:loginid, timestamp=1343625459713, value=loveswh
0000000002 column=info:userid, timestamp=1343625459713, value=100898152

hbase(main):005:0> scan 'toplist_ware_ios_1009_201231',{COLUMNS=>['info:loginid'],FILTER=>"(QualifierFilter(=,'substring:id'))"}
ROW COLUMN+CELL
0000000001 column=info:loginid, timestamp=1343625459713, value=jjm168131013
0000000002 column=info:loginid, timestamp=1343625459713, value=loveswh

hbase(main):007:0> scan 'toplist_ware_ios_1009_201231',{COLUMNS=>['info:'],FILTER=>"(QualifierFilter(=,'substring:nid'))"}
ROW COLUMN+CELL
0000000001 column=info:loginid, timestamp=1343625459713, value=jjm168131013
0000000002 column=info:loginid, timestamp=1343625459713, value=loveswh

hbase(main):008:0> scan 'toplist_ware_ios_1009_201231',{COLUMNS=>['info:'],FILTER=>"(QualifierFilter(=,'substring:nick'))"}
ROW COLUMN+CELL
0000000001 column=info:nick, timestamp=1343625459713, value=\xE5\xAE\xB6\xE6\x9C\x89\xE8\x99\x8E\xE5\xAE\x9
D
0000000002 column=info:nick, timestamp=1343625459713, value=loveswh08

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=zgh1968
 0000000009                       column=info:nick, timestamp=1343625459713, value=zwy99
 0000000009                       column=info:score, timestamp=1343625459713, value=5
 0000000009                       column=info:userid, timestamp=1343625459713, value=100366262
1 row(s) in 0.2520 seconds

3.2 子串
需导入
import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.util.Bytes

hbase(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+CELL
0000000002 column=info:nick, timestamp=1343625446556, value=\xE7\x81\x8F????\xE3\x81\x8A??8888
1 row(s) in 0.0330 seconds

3.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+CELL
0000000016 column=info:nick, timestamp=1343625459713, value=7789\xE6\xB4\x81
1 row(s) in 0.1710 seconds

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+CELL
0000000016 column=info:nick, timestamp=1343625459713, value=7789\xE6\xB4\x81
1 row(s) in 0.0120 seconds
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=Denny_feng
 0000000021 column=info:nick, timestamp=1343625459713, value=\xE5\xB0\x8F\xE7\xBD\x97\xE6\x95\x99\xE7\xBB\x8
 31
2 row(s) in 0.0440 seconds

5. 行查询

 

hbase(main):005:0> get 'toplist_ware_ios_1009_201231','0000000009'
COLUMN CELL
 info:loginid timestamp=1343625459713, value=zgh1968
 info:nick timestamp=1343625459713, value=zwy99
 info:score timestamp=1343625459713, value=5
 info:userid timestamp=1343625459713, value=100366262
4 row(s) in 0.1000 seconds
hbase(main):006:0> get 'toplist_ware_ios_1009_201231','0000000009','info:nick'
COLUMN CELL
 info:nick timestamp=1343625459713, value=zwy99
1 row(s) in 0.0100 seconds
hbase(main):009:0> scan 'toplist_ware_ios_1009_201231',FILTER=>"PrefixFilter('000000002')"
ROW COLUMN+CELL
 0000000020 column=info:loginid, timestamp=1343625459713, value=jjm169212318
 0000000020 column=info:nick, timestamp=1343625459713, value=Denny_feng
 0000000020 column=info:score, timestamp=1343625459713, value=1
 0000000020 column=info:userid, timestamp=1343625459713, value=169212318
 0000000021 column=info:loginid, timestamp=1343625459713, value=jjm169371841
 0000000021 column=info:nick, timestamp=1343625459713, value=\xE5\xB0\x8F\xE7\xBD\x97\xE6\x95\x99\xE7\xBB\x8
 31
 0000000021 column=info:score, timestamp=1343625459713, value=1
 0000000021 column=info:userid, timestamp=1343625459713, value=169371841
2 row(s) in 0.0180 seconds
hbase(main):010:0> scan 'toplist_ware_ios_1009_201231',FILTER=>"PrefixFilter('000000002')",LIMIT=>1
ROW COLUMN+CELL
 0000000020 column=info:loginid, timestamp=1343625459713, value=jjm169212318
 0000000020 column=info:nick, timestamp=1343625459713, value=Denny_feng
 0000000020 column=info:score, timestamp=1343625459713, value=1
 0000000020 column=info:userid, timestamp=1343625459713, value=169212318
1 row(s) in 0.0170 seconds
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=Denny_feng
1 row(s) in 0.0160 seconds

 
查询MPID和GameID同时等于某个值的记录:

hbase(main):014:0> scan 'award_1211',{FILTER=>"(PrefixFilter('2012-11-26')) AND (SingleColumnValueFilter('info','MPID',=,'regexstring:8639',true,true)) AND (SingleColumnValueFilter('info','gameID',=,'regexstring:1001',true,true))",LIMIT=>2}
分享到:
评论

相关推荐

    HBase多表关联查找资料

    本文将详细介绍 HBase 多表关联查找的知识点,涵盖了 HBase 表结构设计、rowkey 设计、columnfamily 设计、column 设计等方面的内容,并结合实际应用场景,提供了一些实用的设计方法和思路。 1. 表的属性 HBase 表...

    HBase开启审计日志

    在大数据领域,HBase被广泛用于实时读/写访问以及随机查询的大规模数据集。随着数据安全的重要性日益凸显,HBase提供了多种安全机制来保障数据的安全性。其中,审计日志功能是记录用户对HBase进行的各种操作的重要...

    Hbase权威指南(HBase: The Definitive Guide)

    通过上述内容可以看出,《HBase权威指南》全面而深入地介绍了HBase的相关知识和技术要点,无论是对于初次接触HBase的新手还是想要深入了解其内部机制的资深开发者来说,都是一本不可多得的好书。该书不仅详细解释了...

    基于HBase的车联网海量数据查询.pdf

    内容涵盖了车联网的概念、数据处理的重要性和挑战、HBase的架构特点、数据预处理、行键设计、查询模式设计以及实验验证等多个方面。这些知识对于了解和应用NoSQL数据库在处理大规模数据场景下的优势具有很高的指导...

    HBase配置文件与HBase doc文档

    1. **快速入门**:介绍如何安装、启动和关闭HBase,以及创建表、插入数据、查询数据的基本操作。 2. **架构**:详细解释了HBase的分布式架构,包括Master节点、RegionServer、Region、Column Family等概念。 3. **...

    hbase 数据库

    8. **操作HBase**:在HBase Shell中,你可以创建表、插入数据、查询数据、删除表等。例如: ```bash hbase(main):001:0> create 'my_table', 'cf1' hbase(main):002:0> put 'my_table', 'row1', 'cf1:col1', '...

    HBase海量数据存储实战视频教程

    手把手视频详细讲解项目开发全过程,需要的小伙伴...7. 基于Phoenix消息数据查询 第三章 HBase高级 1. 重要工作机制 2. HBase批量装载——Bulk load 3. HBase的协处理器(Coprocessor) 4. HBase事务 5. HBase数据结构

    HBase数据库设计.doc

    1. **分布式存储**:HBase构建在Hadoop的HDFS(Hadoop Distributed File System)之上,确保了数据的高可用性和容错性。 2. **列导向**:与传统的关系型数据库不同,HBase以列族为单位存储数据,这使得数据读取更加...

    HBase官方文档

    HBase是一个分布式的、面向列的数据库,构建在Apache Hadoop和Apache ZooKeeper之...综上所述,HBase的官方文档涵盖了从基础操作、集群配置到高级主题如性能优化和故障处理的广泛内容,这些都是掌握HBase技术的关键点。

    HBase 2.0 MOB 保存图片小视频利器-upload_HBase2.0MOB_

    用户只需按照常规方式查询Key,HBase会透明地返回对应的文件内容。 5. 数据清理:由于MOB特性可能导致大量小文件的积累,定期执行Mob Compaction是必要的,以优化存储空间并提高查询效率。 6. 性能监控:通过HBase...

    实验三:熟悉常用的HBase操作

    在本实验中,我们将深入学习如何在大数据...在实际工作中,HBase常用于实时查询和大数据分析,是许多大型互联网公司的首选数据库解决方案。因此,对HBase的深入理解和实践能力是成为一名合格的大数据工程师的必备素质。

    HBase企业应用开发实战 PDF电子书 带书签目录

    尽管文档中没有提供具体的书籍内容,但从标题、描述和标签中我们可以推断出该书是关于HBase在企业级应用中的实际应用和技术讲解。下面将基于这些信息,详细介绍HBase的基础概念、特点以及它在企业级应用中的常见应用...

    hbase所需要的包

    1. 行键(Row Key):行键是HBase表中的唯一标识符,用于定位数据。用户可以自定义行键,但设计时应考虑其排序性和可查询性。 2. 列族(Column Family):列族是数据的逻辑分组,每个列族下可以有任意多的列。列在...

    hbase1.0.3_part2

    以上内容构成了HBase 1.0.3进阶学习的Part2,这些知识点有助于开发者更好地理解和利用HBase处理大规模数据。在实际项目中,理解并掌握这些高级特性和最佳实践,能够显著提升HBase的使用效果。在使用HBase时,记得...

    hbase 示例

    1. **安装与配置**:首先,你需要设置HBase环境,包括下载HBase,配置HBase的环境变量,以及启动HBase集群。对于Twitbase,可能还需要额外的配置步骤,例如创建特定的表结构来模拟Twitter的数据模型。 2. **数据...

    CDH使用Solr实现HBase二级索引.docx

    morphline-hbase-mapper.xml 文件的内容如下: <indexer table="HBase_Indexer_Test" mapper="com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper" read-row="never"> 在这个文件中,我们指定...

    Hbase 官方中文文档

    - 讲解了在MapReduce作业中如何访问其他HBase表,以及关于推测执行的相关内容。 8. HBase安全部分: - 阐述了HBase的安全机制,包括如何安全地访问HBase,以及HBase的访问控制机制。 - 提到了如何进行安全批量...

    phoenix-hbase-2.2-5.1.2-bin.tar.gz

    本文将深入探讨这两个技术及其结合体`phoenix-hbase-2.2-5.1.2-bin.tar.gz`的详细内容。 首先,HBase(Hadoop Database)是Apache软件基金会的一个开源项目,它构建于Hadoop之上,是一款面向列的分布式数据库。...

Global site tag (gtag.js) - Google Analytics