一、任务描述
主要使用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命令验证删除清空数据是否成功