`

hbase shell常用命令和filter

 
阅读更多

 

 list 查看表 带有正则写法:

 

 

hbase(main):014:0> list 'zm.*'
TABLE                                                                                                                    
zmtest1                                                                                                                  
1 row(s) in 0.0060 seconds

=> ["zmtest1"]

 

 

 

如下是案例中总结出来的命令:

 

rowkey: PrefixFilter
列名:ColumnPrefixFilter
列值:ValueFilter (精确/模糊) 
      ValueFilter(>,'binary:\x00\x00\x00\x00\x00\x00\x00\x0F')
	  ValueFilter(=,'binary:sku188')
	  ValueFilter(=,'substring:1')
	  可以结合limit使用  LIMIT => 10
		scan 'zmtest1', LIMIT => 10, FILTER=>"( ColumnPrefixFilter('app') AND ValueFilter(>,'binary:\x00\x00\x00\x00\x00\x00\x00\x0F') )"
		scan 'zmtest1', LIMIT => 10  查看10条记录 
          FirstKeyOnlyFilter: 只获取hbase表第一个列和对应value值
          RowFilter: 只获取rowkey
         
hbase 列值为binary下映射到hive:
CREATE EXTERNAL TABLE user_app_cookie_list ( username STRING, app1_cookie_id BIGINT, app2_cookie_id BIGINT )
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, lf:app1#b, lf:app2#b")
TBLPROPERTIES("hbase.table.name" = "zmtest1");

因为下面案例 hbase shell put的值都是二进制,因此在创建hive外表时,需要指定  #b,否则
关联后查询的hive列值是null.

而在案例 hbase+hive结合使用 中,因为shell put的数据都是字符串因此创建外表
不需要指定格式,曾实验用#b  #s创建hive外表,查询结果都是正确的,
估计默认就是#s格式, #b只在hbase shell中显示插入二进制数据时才用到


-- 增加列族名
alter 'zmtest1', NAME => 'cf'  
-- 删除列族
alter 'zmtest1', NAME => 'cf', METHOD => 'delete'
或者
alter 'zmtest1', 'delete' => 'cf'

 

 =============如下是案例============================

 

 

create 'zmtest1', 'lf', 'sf'
              -- lf: column family of LONG values (binary value)
              -- sf: column family of STRING values
					
-- 一个用户(userX),在什么时间(tsX),作为rowkey
-- 对什么产品(value:skuXXX),做了什么操作作为列名,比如,c1: click from homepage; c2: click from ad; s1: search from homepage; b1: buy
put 'zmtest1', 'user1|ts1', 'sf:c1', 'sku1'  -- 向表zmtest1中,rowkey为user1|ts1的记录,添加列族为sf下列名为c1,列值为sku1
put 'zmtest1', 'user1|ts2', 'sf:c1', 'sku188'
put 'zmtest1', 'user1|ts3', 'sf:s1', 'sku123'


put 'zmtest1', 'user2|ts4', 'sf:c1', 'sku2'
put 'zmtest1', 'user2|ts5', 'sf:c2', 'sku288'
put 'zmtest1', 'user2|ts6', 'sf:s1', 'sku222'


====================================hbase shell filter=======================================================
scan 'zmtest1', FILTER=>"ValueFilter(=,'binary:sku188')"     -- 过滤列值value,  binary表示列值二进制下的精确查找
hbase(main):012:0> scan 'zmtest1',FILTER=>"ValueFilter(=,'binary:sku188')"
ROW                             COLUMN+CELL                                                                              
 user1|ts2                      column=sf:c1, timestamp=1468893517729, value=sku188  
 
scan 'zmtest1', FILTER=>"ValueFilter(=,'substring:1')"
hbase(main):013:0> scan 'zmtest1',FILTER=>"ValueFilter(=,'substring:1')"      substring表示列值的截取串查找
ROW                             COLUMN+CELL                                                                              
 user1|ts1                      column=sf:c1, timestamp=1468893512967, value=sku1                                        
 user1|ts2                      column=sf:c1, timestamp=1468893517729, value=sku188                                      
 user1|ts3                      column=sf:s1, timestamp=1468893522589, value=sku123  

 
scan 'zmtest1', FILTER=>"ValueFilter(=,'substring:88')"
scan 'zmtest1', FILTER=>"ColumnPrefixFilter('c2') AND ValueFilter(=,'substring:88')"   -- ColumnPrefixFilter表示列名的substring包含,列名和列值的组合过滤
scan 'zmtest1', FILTER=>"ColumnPrefixFilter('s') AND ( ValueFilter(=,'substring:123') OR ValueFilter(=,'substring:222') )"


=============================================================================================================
c, 一个rowkey可以有多个版本,以timestamp来区别,而且同一个key 会有多个列名,column,  只拿出key里面第一个column的第一个version版本的值,
KeyOnlyFilter(): 只拿出key(keyonly), 去掉value的获取 这样在做count的操作时,就提高效率。
scan 'zmtest1', FILTER=>"FirstKeyOnlyFilter() AND ValueFilter(=,'binary:sku188') AND KeyOnlyFilter()"    
--结果
ROW                             COLUMN+CELL                                                                              
 user1|ts2                      column=sf:c1, timestamp=1468893517729, value=  
 
scan 'zmtest1', FILTER=>"FirstKeyOnlyFilter() AND ValueFilter(=,'binary:sku188')"
--结果
ROW                             COLUMN+CELL                                                                              
 user1|ts2                      column=sf:c1, timestamp=1468893517729, value=sku188   
 
 
-- rowkey过滤PrefixFilter
scan 'zmtest1', FILTER => "PrefixFilter('user1')"   
--结果:
ROW                             COLUMN+CELL                                                                              
 user1|ts1                      column=sf:c1, timestamp=1468893512967, value=sku1                                        
 user1|ts2                      column=sf:c1, timestamp=1468893517729, value=sku188                                      
 user1|ts3                      column=sf:s1, timestamp=1468893522589, value=sku123  

-- STARTROW表示从这一行开始,包含这一行
-- STOPROW 表示到这行结束,不包含这一样
-- 其中,startrow stoprow的数值不一定就是精确值,可以是rowkey里存在的某一个子串
scan 'zmtest1', {STARTROW=>'user1|ts2', FILTER => "PrefixFilter ('user1')"}
--结果
ROW                             COLUMN+CELL                                                                              
 user1|ts2                      column=sf:c1, timestamp=1468893517729, value=sku188                                      
 user1|ts3                      column=sf:s1, timestamp=1468893522589, value=sku123 
scan 'zmtest1', {STARTROW=>'user1|ts2', STOPROW=>'user2'}
--结果
ROW                             COLUMN+CELL                                                                              
 user1|ts2                      column=sf:c1, timestamp=1468893517729, value=sku188                                      
 user1|ts3                      column=sf:s1, timestamp=1468893522589, value=sku123 
 
scan 'zmtest1', {STARTROW=>'user1', STOPROW=>'user2'} -- user2不一定就是一个精确的rowkey
--结果
ROW                             COLUMN+CELL                                                                              
 user1|ts1                      column=sf:c1, timestamp=1468893512967, value=sku1                                        
 user1|ts2                      column=sf:c1, timestamp=1468893517729, value=sku188                                      
 user1|ts3                      column=sf:s1, timestamp=1468893522589, value=sku123 

==========================上面的filter是直接可以调用的,下面的filter是需要引用后才能使用===============================

-- 
import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.filter.RowFilter

-- rowkey里面包含ts3
scan 'zmtest1', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), SubstringComparator.new('ts3'))}

eg:
hbase(main):024:0> import org.apache.hadoop.hbase.filter.CompareFilter
=> Java::OrgApacheHadoopHbaseFilter::CompareFilter
hbase(main):025:0> import org.apache.hadoop.hbase.filter.SubstringComparator
=> Java::OrgApacheHadoopHbaseFilter::SubstringComparator
hbase(main):026:0> import org.apache.hadoop.hbase.filter.RowFilter
=> Java::OrgApacheHadoopHbaseFilter::RowFilter
hbase(main):027:0> scan 'zmtest1', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), SubstringComparator.new('ts3'))}
ROW                             COLUMN+CELL                                                                              
 user1|ts3                      column=sf:s1, timestamp=1468893522589, value=sku123 

 

-- 引用正则
import org.apache.hadoop.hbase.filter.RegexStringComparator

put 'zmtest1', 'user2|err', 'sf:s1', 'sku999'
scan 'zmtest1', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'),RegexStringComparator.new('^user\d+\|ts\d+$'))}
--结果
ROW                             COLUMN+CELL                                                                              
 user1|ts1                      column=sf:c1, timestamp=1468893512967, value=sku1                                        
 user1|ts2                      column=sf:c1, timestamp=1468893517729, value=sku188                                      
 user1|ts3                      column=sf:s1, timestamp=1468893522589, value=sku123                                      
 user2|ts4                      column=sf:c1, timestamp=1468893527021, value=sku2                                        
 user2|ts5                      column=sf:c2, timestamp=1468893527046, value=sku288                                      
 user2|ts6                      column=sf:s1, timestamp=1468893528197, value=sku222  
 

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
scan 't1', { COLUMNS => 'family:qualifier', FILTER =>
    SingleColumnValueFilter.new
        (Bytes.toBytes('family'),
         Bytes.toBytes('qualifier'),
         CompareFilter::CompareOp.valueOf('EQUAL'),
         SubstringComparator.new('somevalue'))
}

put 'zmtest1', 'user1|ts9', 'sf:b1', 'sku1'
scan 'zmtest1', FILTER=>"ColumnPrefixFilter('b1') AND ValueFilter(=,'binary:sku1')"
scan 'zmtest1', {COLUMNS => 'sf:b1', FILTER => SingleColumnValueFilter.new(Bytes.toBytes('sf'), Bytes.toBytes('b1'), CompareFilter::CompareOp.valueOf('EQUAL'), Bytes.toBytes('sku1'))}


-- binary value --

org.apache.hadoop.hbase.util.Bytes.toString("Hello HBase".to_java_bytes)

org.apache.hadoop.hbase.util.Bytes.toString("\x48\x65\x6c\x6c\x6f\x20\x48\x42\x61\x73\x65".to_java_bytes)

-- 用户userX,作为rowkey,他的各种设备(brwoser, app, pc)作为列名,所对应的cookie_id作为value (长整型变量)
put 'zmtest1', 'user1', 'lf:browser1', "\x00\x00\x00\x00\x00\x00\x00\x02"
put 'zmtest1', 'user1', 'lf:app1', "\x00\x00\x00\x00\x00\x00\x00\x0F"
put 'zmtest1', 'user1', 'lf:app2', "\x00\x00\x00\x00\x00\x00\x00\x10"
put 'zmtest1', 'user2', 'lf:app1', "\x00\x00\x00\x00\x00\x00\x00\x11"
put 'zmtest1', 'user2', 'lf:pc1', "\x00\x00\x00\x00\x00\x00\x00\x12"

-- ValueFilter后可以跟着 =  > < 等符号
scan 'zmtest1', {STOPROW=>'user2', FILTER=>"( ColumnPrefixFilter('app') AND ValueFilter(>,'binary:\x00\x00\x00\x00\x00\x00\x00\x0F') )"}

scan 'zmtest1', LIMIT => 10, FILTER=>"( ColumnPrefixFilter('app') AND ValueFilter(>,'binary:\x00\x00\x00\x00\x00\x00\x00\x0F') )"
--结果
ROW                             COLUMN+CELL                                                                              
 user1                          column=lf:app2, timestamp=1468906199761, value=\x00\x00\x00\x00\x00\x00\x00\x10          
 user2                          column=lf:app1, timestamp=1468906199806, value=\x00\x00\x00\x00\x00\x00\x00\x11  
 
 


-- 增加列族名
alter 'zmtest1', NAME => 'cf'  
-- 删除列族
alter 'zmtest1', NAME => 'cf', METHOD => 'delete'
或者
alter 'zmtest1', 'delete' => 'cf'
-- desc 'zmtest1'


-- hive hbase mapping --  其中,:key可以忽略掉

CREATE EXTERNAL TABLE user_app_cookie_list ( username STRING, app1_cookie_id BIGINT, app2_cookie_id BIGINT )
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, lf:app1#b, lf:app2#b")
TBLPROPERTIES("hbase.table.name" = "zmtest1");

select * from user_app_cookie_list;

--
#b 表示binary
#s 表示字符串
是base.columns.mapping的关键字
--
hbase符合上述条件的数据:
 user1                          column=lf:app1, timestamp=1468906199730, value=\x00\x00\x00\x00\x00\x00\x00\x0F          
 user1                          column=lf:app2, timestamp=1468906199761, value=\x00\x00\x00\x00\x00\x00\x00\x10                                                 
 user2                          column=lf:app1, timestamp=1468906199806, value=\x00\x00\x00\x00\x00\x00\x00\x11          
 user2                          column=lf:pc1, timestamp=1468906200773, value=\x00\x00\x00\x00\x00\x00\x00\x12 
 
 hive> select * from user_app_cookie_list;
OK
user1   15      16
user2   17      NULL



-- 用户userX,作为rowkey,在什么时间(timestamp)作为列名,访问了什么页面的id作为value:page_id (整型变量)
put 'zmtest1', 'user1', 'cf:1399999999', "\x00\x00\x00\x09"
put 'zmtest1', 'user1', 'cf:1400000000', "\x00\x00\x00\x08"
put 'zmtest1', 'user1', 'cf:1400000001', "\x00\x00\x00\x07"
put 'zmtest1', 'user1', 'cf:1400000002', "\x00\x00\x20\xFB"
put 'zmtest1', 'user2', 'cf:1500000000', "\x00\x00\x00\x11"
put 'zmtest1', 'user2', 'cf:1500000001', "\x00\x00\x20\xFC"
     表          rowkey   列族:列名         列值




-- hive hbase mapping cf with binary --

http://www.abcn.net/2013/11/hive-hbase-mapping-column-family-with-binary-value.html

CREATE EXTERNAL TABLE ts_string ( username STRING, visits map<string, int> )
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, cf:#s:b")
TBLPROPERTIES("hbase.table.name" = "zmtest1");

CREATE EXTERNAL TABLE ts_int ( username STRING, visits map<int, int> )
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, cf:#s:b")
TBLPROPERTIES("hbase.table.name" = "zmtest1");

CREATE EXTERNAL TABLE ts_int_long ( username STRING, visits map<int, bigint> )
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, cf:#s:b")
TBLPROPERTIES("hbase.table.name" = "zmtest1");

select * from ts_int
lateral view explode(visits) t as ts, page;

select username, ts, page_id from ts_int
lateral view explode(visits) t as ts, page_id;

select username, pos, ts, page_id from ts_int
lateral view posexplode(visits) t as pos, ts, page_id;

username   pos   ts             page_id
user1      1     1399999999     9
user1      2     1400000000     8
user1      3     1400000001     7
user1      4     1400000002     8443
user2      1     1500000000     17
user2      2     1500000001     8444

select username, from_unixtime(ts), page_id from ts_int lateral view explode(visits) t as ts, page_id;

 

 

 

 

分享到:
评论

相关推荐

    hbase shell常用命令汇总

    ### HBase Shell 常用命令详解 #### 一、HBase Shell 概述 HBase Shell 是一个基于命令行的工具,用于与HBase进行交互。它提供了一系列丰富的命令来执行基本的数据管理任务,例如创建表、插入数据、查询数据等。...

    HDFS_HBaseShell的常用命令

    HDFS_HBaseShell的常用命令 HDFS(Hadoop Distributed File System)是一种分布式文件系统,主要用于存储和管理大规模数据。HBase 是一个基于HDFS的NoSQL数据库,用于存储和管理大规模结构化和半结构化数据。HBase ...

    Hbase shell及常用命令

    HBase shell及常用命令 HBase Shell是HBase数据库的命令行工具,用户可以使用HBase Shell与HBase进行交互。HBase Shell是一个封装了Java客户端API的JRuby应用软件,在HBase的HMaster主机上通过命令行输入hbase ...

    hbase的shell操作

    本文将基于提供的描述和部分代码示例,深入讲解HBase Shell的操作方法。 ### 创建表 在HBase中,表由行键(Row Key)、列族(Column Family)和列限定符(Column Qualifier)组成。通过HBase Shell可以创建带有...

    大数据+Hbase shell 常用操作命令

    下面将详细介绍HBase shell中的一些常用操作命令。 1. **创建表**: 使用`create`命令创建表,例如创建一个名为`user`的表,包含`info`和`data`两个列族: ```bash create 'user',{NAME =&gt; 'info', VERSIONS =&gt; ...

    hbase shell

    除了上述的 DDL 和 DML 命令之外,HBase Shell 还提供了许多其他的实用命令,帮助用户更好地管理和监控 HBase 集群: ##### 1. `status` **功能**:显示 HBase 集群的状态信息。 **命令格式**: ```sh status ``` ...

    Hbase实验报告.pdf

    解决方法是首先确保HBase服务正常运行,然后通过以下命令启动Shell: ```shell hbase shell ``` 如果出现错误,应检查Hadoop和HBase的配置文件,如`hbase-site.xml`和`hbase-env.sh`,确保它们指向正确的路径和服务...

    HBase基本操作.pdf

    HBase是一种开源的非关系型分布式...需要注意的是,实验手册中提供的命令格式和使用说明是非常基础的入门指引,对于深入应用HBase来说,掌握高级的Filter使用、时间戳和版本控制、以及数据批量导入方法将更为关键。

    Hbase命令大全

    本文将详细介绍 HBase Shell 中的各种常用命令及其用法。 #### 二、创建表(Create) 在 HBase 中,使用 `create` 命令创建表。该命令的基本格式为: ``` create '&lt;表名&gt;', '&lt;列族1&gt;', '&lt;列族2&gt;', ..., '&lt;列族N&gt;' ``...

    hbase学习笔记

    5. **HBase Shell常用命令**: HBase Shell提供了与HBase交互的命令行工具,包括创建表、删除表、插入数据、查询数据等操作。例如: - `create`命令用于创建表,需要指定表名和列族。 - `put`命令用于向表中插入...

    hbase-hadoop+database系统入门书籍

    - **启动HBase服务**:启动HBase Master和RegionServer进程,如果一切正常,可以通过HBase Shell或者浏览器查看HBase的状态。 ### 使用HBase Shell进行交互 HBase Shell提供了命令行界面,用户可以通过它执行各种...

    hbase-2.4.17-bin 安装包

    1. 创建表:使用`hbase shell`进入命令行工具,执行`create '表名', '列族名'`创建表。 2. 插入数据:通过`put '表名', '行键', '列族:列限定符', '值'`命令插入数据。 3. 查询数据:`get '表名', '行键'`获取整行...

    java大数据作业_3HBase

    在HBase Shell中,可以使用Filter来过滤查询结果。例如,使用`SingleColumnValueFilter`来过滤特定的列值: ```shell get 'notes', 'rowkey1', {FILTER =&gt; "SingleColumnValueFilter 'meta','title' = 'title1'"} `...

    HBase企业应用开发实战-高清

    此外,本书还会详细阐述HBase的API使用,包括Java API和命令行工具,以及如何通过HBase Shell进行数据操作。通过实例,读者可以学习如何创建表、插入和查询数据,以及执行复杂的扫描操作,这对于实际开发中的数据...

    【大数据学习资料】大数据常用命令.zip

    本资料包“【大数据学习资料】大数据常用命令.zip”包含了一份Markdown格式的大数据常用命令文档(大数据常用命令.md)和一个PDF版本的相同内容(【大数据学习资料】大数据学习命令.pdf),旨在为学习者提供方便快捷...

    大数据HBase二次开发.pdf

    1. **HBase Shell**:这是HBase的命令行工具,提供了一种简单的方式来管理和操作HBase。用户可以通过`hbase shell`命令连接到HBase集群,并执行如创建表、插入数据、查询等操作。 2. **Java API**:Java API是HBase...

    HBase:权威指南(中文版)

    本书还详细讲解了HBase的API和工具,包括Java API、命令行接口(HBase Shell)以及监控和管理工具。学习如何创建、查询和操作HBase表,以及如何进行数据导入导出,对于实际开发和运维至关重要。此外,书中还会讨论...

    hbase-0.98.17-hadoop2-bin.tar.gz

    - 读取时,HBase会从内存和HDFS中的HFile查找数据,利用布隆过滤器(Bloom Filter)优化查找效率。 以上就是关于HBase 0.98.17在Linux环境下的安装、配置和使用的基本知识点。在实际生产环境中,还需要考虑集群...

    Hbase中文文档

    2.4. HBase运行模式:单机和分布式 2.5. ZooKeeper 2.6. 配置文件 2.7. 配置示例 2.8. 重要配置 2.9. Bloom Filter 3. 升级 3.1. 从HBase 0.20.x or 0.89.x 升级到 HBase 0.90.x 3.2. 从 0.90.x 到 0.92.x 4. The ...

Global site tag (gtag.js) - Google Analytics