用《王者荣耀》游戏玩家信息管理操作教会使用hbase

一、任务描述

主要使用HBase shell的方式实现对王者荣耀游戏玩家信息表的操作,包括表的创建、删除及数据的插入、查询等操作。

二、了解并使用DDL操作创建王者荣耀玩家信息表

HBase Shell常用DDL(数据定义语言)命令

HBase Shell命令 功能描述
list 列出HBase中的所有表
create 创建一张表
describe 列出表的详细信息
alter 修改表的列族
disable 禁用表,使表无效
enable 启用表,使表有效
drop 删除表
exists 判断表是否存在

2.1下面我们创建王者荣耀玩家信息表

hbase(main):003:0> create 'gamer',{NAME => 'personalInfo',VERSIONS => 1},{NAME => 'recordInfo',VERSIONS =>1},{NAME =>'assetsInfo',VERSIONS=>1}
0 row(s) in 1.3930 seconds

=> Hbase::Table - gamer
hbase(main):004:0> list
TABLE
gamer
1 row(s) in 0.0150 seconds

=> ["gamer"]

注意:其中列族名称必须用单引号括起来,即NAME后的部分,如果有多个列族,应该以逗号分隔,每个列族单独用{}括起来。指定列族参数的格式为参数名=>参数值"=>"是赋值符号,参数名必须大写!
同时,创建gamer表的代码可以进行简化:

create 'gamer','personalInfo','recordInfo','assetsInfo'

2.2查看表的详细信息

 describe 'gamer'

出现Table gamer is ENABLED即可,在结果里可以查看表中的 列族信息,下面我们用一张表格来介绍一下列族描述信息含义。

列族描述 可选值 含义
NAME 可打印的字符串 列族名称,参考ASCII码
BLOOMFILTER NONE((默认)|ROWCOL|ROW 提高随机读的性能
VERSION 数字 列族中单元时间版本最大数量
IN_MEMORY true|false(默认) 使得列族在缓存中拥有更高优先级
KEEP_DELETED_CELLS TRUE|FALSE(默认) 启用后可以避免被标记为删除的单元从HBase中删除
DATA_BLOCK_ENCODING NONE(默认) 数据库编码
TTL 默认FOREVER 单元时间版本超时时间,可指定多长时间(秒)后失效
COMPRESSION NONE(默认)|LZO|SNAPPY|GZIP 压缩算法
MIN_VERSIONS 数字 列族中单元时间版本最小数量
BLOCKCACHE true|false,默认true 是否将数据放入读缓存
BLOCKSIZE 默认65536字节 数据块大小,数据块越小,索引越大
REPLICATION_SCOPE 默认0 开启复制功能

2.3修改表的列族信息
alter命令可以为表增加或修改列族
示例:将gamer表中的personalInfo列族的TTL(用于限定数据的超时时间)信息设置为180天(15552000秒)

alter 'gamer',{NAME=>'recordInfo',TTL=>'15552000'}

再查看表的信息后会发现TTL已经设置成15552000秒

2.4删除表
使用drop命令进行删除操作。当表为enabled时会被禁止删除,只有当我们将表设置为disabled状态时才可以删除

disable 'gamer'

禁用完后,可以使用is_disabled命令查看是否被禁用,true标识则表示已经被禁用
使用enable命令重新启用表
删除表

drop 'gamer'

查看表是否已经存在

exists 'gamer'

三、了解并使用DML操作王者荣耀玩家信息表

我们先来了解一下HBase Shell中的常用DML命令

HBase Shell命令 功能描述
put 向指定的单元添加值
scan 通过扫描表来获取数据
get 通过行或者单元的值
count 统计表中行的数量,一个行键为一行
delete 删除指定对象的值
deleteall 删除整行
truncate 清空表的数据

3.1添加数据
使用put命令向表中添加数据
命令:
put

,, family:qualifier,,
示例:向王者荣耀游戏玩家信息表gamer中添加数据

put 'gamer','row-0001','personalInfo:nickname','QGhappy.junjie'

示例演示的是给gamer表行键(Row Key)为row-0001的personalInfo列族中添加了列nickname,单元值为QGhappy.junjie,下面我们写一下完整代码

 put 'gamer','row-0001','personalInfo:nickname','QGhappy.junjie'
 put 'gamer','row-0001','recordInfo:ranking','one'
 put 'gamer','row-0001','assetsInfo:integral','王者500星'
 put 'gamer','row-0001','personalInfo:gameId','01'

注意:同一个列族中可以添加多个列

 put 'gamer','row-0002','personalInfo:nickname','XQMaster'
 put 'gamer','row-0002','recordInfo:ranking','two'
 put 'gamer','row-0002','assetsInfo:integral','王者499星'
 put 'gamer','row-0002','personalInfo:gameId','02'

3.2查询数据
命令
scan

,{COLUMNS=>[ family:qualifier,…],LIMIT=>num}
其中,大括号的内容为扫描条件,如果不指定就查询所有数据
示例:扫描gamer表中的数据

scan 'gamer'

扫描列族数据

scan 'gamer',{COLUMNS=>'personalInfo'}

扫描列键数据

scan 'gamer',{COLUMNS=>['personalInfo:nickname']}

3.3get获取数据
get命令用于获取行的所有单元或者指定的单元
命令
get ‘表名称’,‘行键’,{COLUMNS=>[‘列祖名1’,‘列族名2’,…],参数名=>参数值…}
get ‘表名称’,‘行键’,{COLUMN=>[‘列键1’,‘列键2’,…],参数名=>参数值…}
get查找的目标是某行的某个列族、列键
scan查找的目标是全表的某个列族、列键
示例:查找行键为row-0001的所有单元

get 'gamer','row-0001'

查找行键‘rw-0001’,列键为‘personalInfo:nickname’的单元

get 'gamer','row-0001',{COLUMN=>'personalInfo:nickname'}

查找行键为‘rw-0001’,列族为‘personalInfo’的单元

get 'gamer','row-0001',{COLUMNS=>'personalInfo'}

3.4删除数据
1.使用delete命令删除数据库中的一个单元
命令
delete‘表名称‘,’行键‘,’列键’
删除表中行键为“row-0001”,列族为personalInfo的所有单元

delete 'gamer','row-0001','personalInfo'

删除完毕后,使用get命令查看是否已经删除成功
2.使用deleteall命令删除一行
删除行键为row-0001的一行数据

deleteall 'gamer','row-0001'

再通过get命令查看是否已经删除成功

3.5清空表中数据
使用truncate命令可以删除表中的所有数据
命令:
truncate ‘表名称’
清空gamer表中的所有数据:

truncate 'gamer'

再使用scan命令验证删除清空数据是否成功

猜你喜欢

转载自blog.csdn.net/weixin_42507474/article/details/107530284