目录

一、命令总汇

二、需求

三、基本操作

1、创建表

 2、查看表

 3、删除表

1)禁用表

3)删除表

 四、数据的操作

1、添加数据

2、 获取数据

3、更新数据

4、删除数据

1)删除指定列 

2)删除整行整列的数据

​ 3)清空表数据

五、数据文件的导入

1、准备数据文件 

2、创建表

3、执行命令导入数据文件

 4、查看数据

六、计数操作 

1、计数命令

2、MR程序计数

七、扫描操作 

 1、全表扫描

2、限定记录数

3、限定列

4、限定行

八、过滤器

1、简介

2、过滤器

3、过滤器的用法

示例:查询指定订单数据

 1)比较运算符

 2)比较器

 3)比较表达式

4、案例一:使用RowFilter查询指定订单id的数据

1)需求

2)分析

3)命令

5、案例查询状态为已付款的订单

1)需求

2)分析

3)命令  

6、案例组合多条件过滤

1)需求

2)分析

 3)命令

7、练习1:支付方式为1,,且金额不大于3000的订单

8、练习2:实现该案例,列的限定用过滤器实现

 9、练习3:选择某个时间段内的订单

九、INCR

 1、需求

 2、incr操作

3、导入测试数据

 4、获取计数器的值

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


一、命令总汇

命令

功能

命令

功能

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

清空表数据 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐