目录
一、命令总汇
| 命令 | 功能 | 命令 | 功能 |
| create | 创建表 | count | 统计行数 |
| put | 插入或更新数据 | delete | 删除指定的行或列的数据 |
| get | 获取指定行或列的数据 | deleteall | 删除整个行或者列的数据 |
| scan | 扫描表并返回表的数据 | truncate | 删除表的数据,结构还在 |
| describe | 查看表的结构 | drop | 删除整个表(包括数据和结构)慎用 |
二、需求
| 订单id | 订单状态 | 支付金额 | 支付方式id | 用户id | 操作时间 | 商品分类 |
| 001 | 已付款 | 200.5 | 1 | 1001 | 2021-3-1 18:01:40 | 手机 |
三、基本操作
1、创建表
语法:create ‘表名‘,’列簇名1’,’列簇名2’

2、查看表
语法:list(查看库中有多少表)
describe ‘表名’(详细查看)

3、删除表
1)禁用表
语法:disable ‘表名’

2)启用表
语法:enable ‘表名’

3)删除表
语法:drop ‘表名’(删除表前需要禁用表)

四、数据的操作
1、添加数据
语法:put ‘表名’,’rowkey’,’列簇名:列名字’,’值’


2、 获取数据
语法:get ‘表名’,’rowkey

注意:如果显示中文乱码,是因为hbase shell中显示中文是十六制编码,要正确显示中文需要添加选项,格式:
{‘FORMATTER‘=>’toString’}

3、更新数据
语法:put ‘表名’,’rowkey’,’列簇名:列名字’,’新值’

4、删除数据
1)删除指定列
语法:delete ‘表名’,’rowkey’,’info:’,’值’


2)删除整行整列的数据
语法:deleteall ‘表名’,’rowkey’
Hbase删除数据并不是真正的删除,而是给数据做一个删除的标注,再查询数据时不显示

3)清空表数据
语法:truncate ‘表名’


五、数据文件的导入
1、准备数据文件


2、创建表
3、执行命令导入数据文件

4、查看数据

六、计数操作
1、计数命令
语法:count ‘表名’

2、MR程序计数
当数据量很大时,可以用HBase提供的mapreduce程序进行运行
hbase org.apache.hadoop.hbase.mapreduce.RowCounter '表名’
注意:
启动yarn集群
启动历史服务器:mapred —daemon start historyserver




七、扫描操作
1、全表扫描
语法:scan ‘表名’,{FORMATTER=>’toString’}

注意:
尽量避免全表扫描一张很大很大的表
2、限定记录数
语法:scan ‘表名‘,{FORMATTER=>’toString’,LIMIT=>数字}

3、限定列
语法:scan ‘表名‘,{FORMATTER=>’toString’,COLUMNS=>[‘列簇名1:列名1’,’列簇名2:列名2’…]}

4、限定行
语法:get “表名” ,”rowkey”

语法:scan"ORDER_INFO",{FORMATTER=>'toString',COLUMNS=>['C1:PAYWAY','C1:STATUS'],ROWPREFIXFILTER=>''}

八、过滤器
1、简介
2、过滤器
| 类别 | 过滤器 | 功能 |
| rowkey过滤器 | RowFilter | 实现行键字符串的比较和过滤 |
| PrefixFilter | rowkey前缀过滤器 | |
| KeyOnlyFilter | 只对单元格的键过滤不显示值 | |
| FirstKeyOnlyFilter | 只扫描显示相同键的第一个单元格,其键值对会显示出来 | |
| 列过滤器 | FamilyFilter | 列簇过滤器 |
| QualifierFilter | 列限定符过滤器,只显示对应列簇列名的数据 | |
| ColumnPrefixFilter | 对列名称的前缀进行过滤 | |
| MultipleColumnPrefixFilter | 可以指定多个前缀对列名过滤 | |
| ColumnRangeFilter | 列名称范围过滤器 | |
| 值过滤器 | ValueFilter | 值过滤器,找到符合值条件的键值对 |
| SingleColumnValueFilter | 在指定的列簇和列名中进行比较的值过滤器 | |
| ColumnValueFilter | 列值过滤器 | |
| SingleColumnValueExcludeFilter | 排出匹配成功的值 | |
| 其他过滤器 | ColumnPaginationFilter | 对一行的所有列分页,只返回[offset,offset+limit]范围内的列 |
| PageFilter | 对显示结果按行进行分页显示 | |
| TimestampsFilter | 时间戳过滤器,支持等值,可以设置多个时间戳 | |
| ColumnCountGetFilter | 限制每个逻辑行返回值对的个数,在get方法中使用 | |
| DependentColumnFilter | 允许用户指定一个参考列或引用列来过滤其他列的过滤器 |

3、过滤器的用法
过滤器一般结合scan命令来使用,
语法:scan ‘表名’,{FILTER=>“过滤器(比较运算符,’比较器表达式‘)”
示例:查询指定订单数据
scan "ORDER_INFO",{FORMATTER=>'toString',FILTER=>"RowFilter(=,'binary:02602f66-adc7-40d4-8485-76b5632b5b53')"}

1)比较运算符
| 比较运算符 | 功能 |
| = | 等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| != | 不等于 |
2)比较器
| 比较器 | 功能 |
| BinaryComparator | 匹配完整字节数组 |
| BinaryPrefixComparator | 匹配字节数组前缀 |
| BitComparator | 匹配比特位 |
| NullComparator | 匹配空值 |
| RegexStringComparator | 匹配正则表达式 |
| SubStringComparator | 匹配子字符串 |
3)比较表达式
| 比较器 | 表达式语音缩写 |
| BinaryComparator | binary:值 |
| BinaryPrefixComparator | binaryprefix:值 |
| BitComparator | bit:值 |
| NullComparator | null |
| RegexStringComparator | regexstring:正则表达式 |
| SubStringComparator | substring:值 |
用法参照官方文档
Apache HBase 3.0.0-alpha-3-SNAPSHOT API

4、案例一:使用RowFilter查询指定订单id的数据
1)需求
查询指定订单的数据,订单号为“02602f66-adc7-40d4-8485-76b5632b5b53”、订单状态及支付方式
2)分析
- 因为订单id就是表的rowkey,所以应该使用rowkey过滤器RowFilter来过滤数据
- 比较运算符:=
- 比较器表达式:binary:值
3)命令
scan 'ORDER_INFO',{FORMATTER=>'toString',FILTER=>"RowFilter(=,'binary:02602f66-adc7-40d4-8485-76b5632b5b53')",COLUMNS=>['C1:PAYWAY','C1:STATUS']}

5、案例查询状态为已付款的订单
1)需求
查询状态为已付款的订单
2)分析
- 因为状态为已付款要查询指定值的数据,所以不能使用rowkey过滤器,而是要使用值过滤器
- 状态为列名,已付款为值,所以可以选用SingleColumnValueFilter,查看api文档,需要传入四个参数:
- 列簇
- 列标识符(列名)
- 比较运算符
- 比较器

3)命令
scan 'ORDER_INFO',{FORMATTER=>'toString',FILTER=>"SingleColumnValueFilter('C1','STATUS',=,'binary:已付款')"}

注意:
- 列簇名和列名大小写一定要对
- 列名写错了过滤不了数据,但是hbase不会报错,因为hbase是无模式的
6、案例组合多条件过滤
1)需求
查询支付方式为1,且金额大于3000的订单
2)分析
- 此处需要使用多个过滤器组合使用共同实现查询的要求,多个过滤器可以使用AND(且)、OR(或者)来进行组合。
- 使用值过滤器SingleColumnValueFilter实现对应列值的查询
- 支付方式为1的过滤器:SingleColumnValueFilter('C1','PAYWAY',=,'binary:1')
- 金额大于3000的过滤器:SingleColumnValueFilter('C1','PAY_MONEY',>,'binary:3000')
- 两个过滤器的关系:且用AND来实现
3)命令
scan 'ORDER_INFO',{FORMATTER=>'toString',FILTER=>"SingleColumnValueFilter('C1','PAYWAY',=,'binary:1') AND SingleColumnValueFilter('C1','PAY_MONEY',>,'binary:3000')",COLUMNS=>['C1:PAYWAY','C1:PAY_MONEY']}

7、练习1:支付方式为1,,且金额不大于3000的订单
scan 'ORDER_INFO',{FORMATTER=>'toString',FILTER=>"SingleColumnValueFilter('C1','PAYWAY',=,'binary:1') AND SingleColumnValueFilter('C1','PAY_MONEY',<=,'binary:3000')",COLUMNS=>['C1:PAYWAY','C1:PAY_MONEY']}

8、练习2:实现该案例,列的限定用过滤器实现
scan "ORDER_INFO",{FORMATTER=>'toString',FILTER=>"SingleColumnValueFilter('C1','PAYWAY',=,'binary:1') AND SingleColumnValueFilter('C1','PAY_MONEY',<=,'binary:3000') AND ColumnPrefixFilter('PAY')"}

9、练习3:选择某个时间段内的订单
scan "ORDER_INFO",{FORMATTER=>'toString',FILTER=>"SingleColumnValueFilter('C1','OPERATION_DATE',>=,'binary:2020-04-25 12:09:16') AND SingleColumnValueFilter('C1','OPERATION_DATE',<=,'binary:2020-04-25 12:09:50')"}

九、INCR
1、需求
| 新闻ID | 访问次数 | 时间段 | rowkey |
| 0000000001 | 12 | 00:00-01:00 | 0000000001_00:00-01:00 |
| 0000000002 | 20 | 01:00-02:00 | 0000000002_01:00-02:00 |
2、incr操作
语法:
incr ‘表名’,’rowkey’,’列簇’,’列名’,’累加值(默认累加1)’
说明:
如果某一列要实现计数功能,必须要使用incr来创建对应的列
使用put创建的列是不能实现累加的
3、导入测试数据

上传成功

查看前五行数据
scan "NEWS_VISIT_CNT",{FORMATTER=>'toString',LIMIT=>5}

4、获取计数器的值
语法:
get_counter ,‘表名’,’rowkey’,’列簇:列名’
get_counter "NEWS_VISIT_CNT",'0000000001_00:00-01:00','C1:CNT'

5、使用incr进行计数器累加操作


十、Shell的管理操作
1、status
显示服务器的状态

2、whoami

3、list
显示所有的表

4、count
查看表的结构

5、describe

6、exists

7、is_enabled、is_disabled
判断表是否启用或是禁用

8、alte
改变表或列簇的模式



9、disable和enable
禁用和启动表
10、drop
删除表
11、truncate
清空表数据
本文详细介绍了HBase数据库的基本操作,包括创建、查看、删除表,以及数据的增删查改。深入探讨了数据文件导入、计数、扫描操作,特别是过滤器的使用,展示了如何通过不同类型的过滤器实现复杂查询。此外,还讲解了INCR计数器功能和Shell管理操作,帮助读者全面理解HBase的管理和应用。


481

被折叠的 条评论
为什么被折叠?



