一、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=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 表结构设计、rowkey 设计、columnfamily 设计、column 设计等方面的内容,并结合实际应用场景,提供了一些实用的设计方法和思路。 1. 表的属性 HBase 表...
在大数据领域,HBase被广泛用于实时读/写访问以及随机查询的大规模数据集。随着数据安全的重要性日益凸显,HBase提供了多种安全机制来保障数据的安全性。其中,审计日志功能是记录用户对HBase进行的各种操作的重要...
通过上述内容可以看出,《HBase权威指南》全面而深入地介绍了HBase的相关知识和技术要点,无论是对于初次接触HBase的新手还是想要深入了解其内部机制的资深开发者来说,都是一本不可多得的好书。该书不仅详细解释了...
内容涵盖了车联网的概念、数据处理的重要性和挑战、HBase的架构特点、数据预处理、行键设计、查询模式设计以及实验验证等多个方面。这些知识对于了解和应用NoSQL数据库在处理大规模数据场景下的优势具有很高的指导...
1. **快速入门**:介绍如何安装、启动和关闭HBase,以及创建表、插入数据、查询数据的基本操作。 2. **架构**:详细解释了HBase的分布式架构,包括Master节点、RegionServer、Region、Column Family等概念。 3. **...
8. **操作HBase**:在HBase Shell中,你可以创建表、插入数据、查询数据、删除表等。例如: ```bash hbase(main):001:0> create 'my_table', 'cf1' hbase(main):002:0> put 'my_table', 'row1', 'cf1:col1', '...
手把手视频详细讲解项目开发全过程,需要的小伙伴...7. 基于Phoenix消息数据查询 第三章 HBase高级 1. 重要工作机制 2. HBase批量装载——Bulk load 3. HBase的协处理器(Coprocessor) 4. HBase事务 5. HBase数据结构
1. **分布式存储**:HBase构建在Hadoop的HDFS(Hadoop Distributed File System)之上,确保了数据的高可用性和容错性。 2. **列导向**:与传统的关系型数据库不同,HBase以列族为单位存储数据,这使得数据读取更加...
HBase是一个分布式的、面向列的数据库,构建在Apache Hadoop和Apache ZooKeeper之...综上所述,HBase的官方文档涵盖了从基础操作、集群配置到高级主题如性能优化和故障处理的广泛内容,这些都是掌握HBase技术的关键点。
用户只需按照常规方式查询Key,HBase会透明地返回对应的文件内容。 5. 数据清理:由于MOB特性可能导致大量小文件的积累,定期执行Mob Compaction是必要的,以优化存储空间并提高查询效率。 6. 性能监控:通过HBase...
在本实验中,我们将深入学习如何在大数据...在实际工作中,HBase常用于实时查询和大数据分析,是许多大型互联网公司的首选数据库解决方案。因此,对HBase的深入理解和实践能力是成为一名合格的大数据工程师的必备素质。
尽管文档中没有提供具体的书籍内容,但从标题、描述和标签中我们可以推断出该书是关于HBase在企业级应用中的实际应用和技术讲解。下面将基于这些信息,详细介绍HBase的基础概念、特点以及它在企业级应用中的常见应用...
1. 行键(Row Key):行键是HBase表中的唯一标识符,用于定位数据。用户可以自定义行键,但设计时应考虑其排序性和可查询性。 2. 列族(Column Family):列族是数据的逻辑分组,每个列族下可以有任意多的列。列在...
以上内容构成了HBase 1.0.3进阶学习的Part2,这些知识点有助于开发者更好地理解和利用HBase处理大规模数据。在实际项目中,理解并掌握这些高级特性和最佳实践,能够显著提升HBase的使用效果。在使用HBase时,记得...
1. **安装与配置**:首先,你需要设置HBase环境,包括下载HBase,配置HBase的环境变量,以及启动HBase集群。对于Twitbase,可能还需要额外的配置步骤,例如创建特定的表结构来模拟Twitter的数据模型。 2. **数据...
morphline-hbase-mapper.xml 文件的内容如下: <indexer table="HBase_Indexer_Test" mapper="com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper" read-row="never"> 在这个文件中,我们指定...
- 讲解了在MapReduce作业中如何访问其他HBase表,以及关于推测执行的相关内容。 8. HBase安全部分: - 阐述了HBase的安全机制,包括如何安全地访问HBase,以及HBase的访问控制机制。 - 提到了如何进行安全批量...
除了上述内容外,HBase还涉及许多其他高级主题,如压缩算法的选择、缓存策略、故障恢复机制等,这些都需要开发者根据具体的业务需求进行细致的考虑。 ### 结论 通过深入理解HBase的逻辑视图和物理视图,以及掌握...