HBase基础命令

HBase基础命令

五、hbase shell

命名 描述 语法
help ‘命名名’ 查看命令的使用描述 help ‘命令名’
whoami 我是谁 whoami
version 返回hbase版本信息 version
status 返回hbase集群的状态信息 status
table_help 查看如何操作表 table_help
create 创建表 create ‘表名’, ‘列簇名1’, ‘列簇名2’, ‘列簇名N’
alter 修改列簇 添加一个列簇:alter ‘表名’, ‘列簇名’
删除列簇:alter ‘表名’,
describe 显示表相关的详细信息 describe ‘表名’
list 列出hbase中存在的所有表 list
exists 测试表是否存在 exists ‘表名’
put 添加或修改的表的值 put ‘表名’, ‘行键’, ‘列簇名’, ‘列值’
put ‘表名’, ‘行键’, ‘列簇名:列名’, ‘列值’
scan 通过对表的扫描来获取对用的值 scan ‘表名’
扫描某个列簇: scan ‘表名’, {COLUMN=>‘列簇名’}
扫描某个列簇的某个列: scan ‘表名’, {COLUMN=>‘列簇名:列名’}
查询同一个列簇的多个列: scan ‘表名’,
get 获取行或单元(cell)的值 get ‘表名’, ‘行键’
get ‘表名’, ‘行键’, ‘列簇名’
count 统计表中行的数量 count ‘表名’
incr 增加指定表行或列的值 incr ‘表名’, ‘行键’, ‘列簇:列名’, 步长值
get_counter 获取计数器 get_counter ‘表名’, ‘行键’, ‘列簇:列名’
delete 删除指定对象的值(可以为表,行,列对应的值,另外也可以指定时间戳的值) 删除列簇的某个列: delete ‘表名’, ‘行键’, ‘列簇名:列名’
deleteall 删除指定行的所有元素值 deleteall ‘表名’, ‘行键’
truncate 重新创建指定表 truncate ‘表名’
enable 使表有效 enable ‘表名’
is_enabled 是否启用 is_enabled ‘表名’
disable 使表无效 disable ‘表名’
is_disabled 是否无效 is_disabled ‘表名’
drop 删除表 drop的表必须是disable的
disable ‘表名’
drop ‘表名’
shutdown 关闭hbase集群(与exit不同)
tools 列出hbase所支持的工具
exit 退出hbase shell

如果已经配置了HBase的环境变量,就可以直接输入命令进入hbase

hbase shell

输入错误的时候,旧版本按住ctrl+退格删除,新版本不需要

help指令

help 'namespace'

image-20240417161556088

general类

显示集群状态 status

image-20240417161711239

查询数据库版本 version

image-20240417161750235

显示当前用户与组 whoami

image-20240417161846191

查看操作表的命令 table_help

image-20240417162000599

退出 HBase Shell exit

image-20240417162058088

DDL相关命令

创建表 create

注意:创建表的时候1只需要指定列簇名称,不用指定列名

#语法
create '表名',{NAME=>'列簇名1'},{NAME=>'列簇名2'},{NAME=>'列簇名3'}
#这种写法是简写方法,也可以私用其他函数指定跟多属性,例如:VERSIONS,TTL,BLOCKCACHE,CONFIGURATION等属性
create '表名','列簇名1','列簇名2','列簇名3'
create '表名',{NAME=>'列簇名',VERSIONS=>版本号(就是能存几个数值),TTL=>过期时间,BLOCKCACE=>true}

#示例:
#创建一个叫  tbl  的表,列簇名为两个叫  info  和  detail
create 'tbl','info','detail'

#创建一个叫  tbl2  的表,列簇名为f1,版本号为2(就是能存几个数据值),过期时间为2592000,块缓存开启状态
create 'tb2',{NAME=>'f1',VERSIONS=>2,TTL=>2592000,BLOCKCACHE=>true}

创建一个叫 tbl 的表,列簇名为两个叫 info 和 detail

image-20240417163040635

创建一个叫 tbl2 的表,列簇名为f1,版本号为2(就是能存几个数据值),过期时间为2592000,块缓存开启状态

image-20240417163929622

修改(添加、删除)表结构 Schema alter

添加一个列簇
#语法
alter '表名','列簇名'

#示例:
alter 'tbl','address'

将这个表添加一个列簇名为 address

image-20240417164231804

删除一个列簇
#语法
alter '表名',{NAME=>'列簇名',METHOD=>'delete'}

#示例:
alter 'tbl',{NAME=>'address',METHOD=>'delete'}

删除一个列簇

image-20240417164804925

修改列簇的属性

可以修改列簇的 VERSIONSIN_MEMORY

#修改info的版本为5
alter 'tbl',NAME=>'info',VERSIONS=>5

#修改多个列簇,修改info为内存,版本号为5
alter 'tbl','info',{NAME=>'info',IN_MEMOY=>true},{NAME=>'detail',VERSIONS=>5}

获取表的描述 describe

#语法:
describe '表名'

# 示例:
describe 'tbl'

显示 tbl 表的详细细节

image-20240417165815513

列举所有表 list

image-20240417165946673

查看表是否存在 exists

#语法
exists '表名'

# 示例:
exists 'tbl'

image-20240417170131409

启用表 **enable ** 和禁用表 disable

通过 enabledisable 来启用/禁用这个表,相应的可以通过 is_enabledis_disabled 来检查表是否启用或被禁用

#语法
enable '表名'
is_enabled '表名'

disable '表名'
is_disabled '表名'

#示例:
disable 'tbl'
is_disabled 'tbl'

enable 'tbl'
is_enabled 'tbl'

is_disabled 'tbl' 表tbl是否是禁用的 不是启用的所以是false

image-20240417170946268

disable 'tbl' 禁用表tbl

image-20240417171154090

is_enabled 'tbl' 启用表tbl 是禁用的所以是false

image-20240417171315610

禁用满足正则表达式的所有表 disable_all

  • . 匹配除了“/n”和“/r”之外的任何单个字符

  • ***** 匹配前面的子表达式任意次

    #匹配以t开头的表名
    disable_all 't.*'
    
    #匹配指定命名空间下的以t开头的所有表
    disable_all 'bigdata29:t.*'
    
    #匹配指定命名空间下的所有表
    disable_all 'bigdata29:.*'
    

启用满足正则表达式的所有表 enable_all

enable_all 't.*'
enable_all 'bigdata29:t.*'
enable_all 'bigdata29:.*'

删除表drop

需要先将表禁用之后才能对表进行删除,在启用状态的表是不能删除的

#语法
disable '表名'
drop '表名'

#示例:
disable 'tb2'
drop 'tb2'

image-20240417172802699

这时候命名空间里面已经删除了这个tb2表

image-20240417172812921

删除满足正则表达式的所有表 drop_all

drop_all 't.*'
drop_all 'bigdata:t.*'
drop_all 'bigdata:.*'

将某个表赋值给一个变量 get_table

通过var=get_table '表名' 赋值给一个变量对象,然后 对象.方法 来调用,这样就不用每次都列举表名

image-20240417185723767

获取rowKey所在的区 locate_region

locate_region '表名','行键'

显示hbase所支持的所有过滤器

过滤器用于get和scan命令中作为筛选数据的条件,类似关系型数据库中的where的作用

image-20240417194714185

命名空间 namespace

hbase中没有数据库的概念,使用namespace来进行管理

image-20240417194834009

获取命名空间描述 describe_namespace

describe_namespace 'bigdata29'

image-20240417202257460

查看命名空间下的所有表 list_namespace_tables

list_namespace_tables 'default'

image-20240417202559515

创建命名空间 create_namespace

create_namespace 'bigdata'

image-20240417204845431

删除命名空间 drop_namespace

drop_namespace 'bigdata'

image-20240417204946122

DML相关命令

插入或者修改数据 put

image-20240417205109404

#语法
#当列簇中只有一个列的时候'列簇名:列名'使用'列簇名'
put '表名','行键','列簇名','列值'
put '表名','行键','列簇名:列名','列值'

#示例:
create 'users', 'info', 'detail', 'address'

# 第一行数据
put 'users', 'rk1001', 'info:id', '1'
put 'users', 'rk1001', 'info:name', '张三'
put 'users', 'rk1001', 'info:age', '28'
put 'users', 'rk1001', 'detail:birthday', '1990-06-26'
put 'users', 'rk1001', 'detail:email', 'abc@163.com'
put 'users', 'rk1001', 'detail:create_time', '2019-03-04 14:26:10'
put 'users', 'rk1001', 'address', '上海市'

# 第二行数据
put 'users', 'rk1002', 'info:id', '2'
put 'users', 'rk1002', 'info:name', '李四'
put 'users', 'rk1002', 'info:age', '27'
put 'users', 'rk1002', 'detail:birthday', '1990-06-27'
put 'users', 'rk1002', 'detail:email', 'xxx@gmail.com'
put 'users', 'rk1002', 'detail:create_time', '2019-03-05 14:26:10'
put 'users', 'rk1002', 'address', '北京市'


# 第三行数据
put 'users', 'rk1003', 'info:id', '3'
put 'users', 'rk1003', 'info:name', '王五'
put 'users', 'rk1003', 'info:age', '26'
put 'users', 'rk1003', 'detail:birthday', '1990-06-28'
put 'users', 'rk1003', 'detail:email', 'xyz@qq.com'
put 'users', 'rk1003', 'detail:create_time', '2019-03-06 14:26:10'
put 'users', 'rk1003', 'address', '杭州市'

全表扫描

# 语法
scan '表名'

# 示例
scan 'users'   // 效果类似于sql语句中select * from users

image-20240417221130639

扫描整个列簇

# 语法
scan '表名', {COLUMN=>'列簇名'}

# 示例
scan 'users', {COLUMN=>'info'}

扫描整个列簇的某个列

# 语法
scan '表名', {COLUMN=>'列簇名:列名'}

# 示例
scan 'users', {COLUMN=>'info:age'}

5.5.3 获取数据get

# 语法
get '表名', '行键'

# 示例
get 'users', 'xiaoming'

根据某一行某列簇的数据

# 语法
get '表名', '行键', '列簇名'

# 示例
get 'users', 'xiaoming', 'info'
# 创建表,c1版本为4, 元数据mykey=myvalue
hbase(main):009:0> create 'test1', {NAME => 'cf1', VERSIONS => 4}
0 row(s) in 2.2810 seconds

=> Hbase::Table - t1
# 添加列族c2, c3
hbase(main):010:0> alter 't1', 'c2', 'c3'
Updating all regions with the new schema...
1/1 regions updated.
Done.
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 3.8320 seconds

# 出入数据,c1 插入4个版本的值
hbase(main):011:0> put 't1', 'r1', 'c1', 'v1'
0 row(s) in 0.1000 seconds

hbase(main):012:0> put 't1', 'r1', 'c1', 'v11'
0 row(s) in 0.0180 seconds

hbase(main):013:0> put 't1', 'r1', 'c1', 'v111'
0 row(s) in 0.0140 seconds

hbase(main):014:0> put 't1', 'r1', 'c1', 'v1111'
0 row(s) in 0.0140 seconds

# 插入c2、c3的值
hbase(main):015:0> put 't1', 'r1', 'c2', 'v2'
0 row(s) in 0.0140 seconds

hbase(main):016:0> put 't1', 'r1', 'c3', 'v3'
0 row(s) in 0.0210 seconds

# 获取rowKey=r1的一行记录
hbase(main):017:0> get 't1', 'r1'
COLUMN                                              CELL
 c1:                                                timestamp=1552819382575, value=v1111
 c2:                                                timestamp=1552819392398, value=v2
 c3:                                                timestamp=1552819398244, value=v3
3 row(s) in 0.0550 seconds

# 获取rowKey=r1并且 1552819392398 <= 时间戳范围 < 1552819398244
hbase(main):018:0> get 't1', 'r1', {TIMERANGE => [1552819392398, 1552819398244]}
COLUMN                                              CELL
 c2:                                                timestamp=1552819392398, value=v2
1 row(s) in 0.0090 seconds

# 获取指定列的值
hbase(main):019:0> get 't1', 'r1', {COLUMN => 'c1'}
COLUMN                                              CELL
 c1:                                                timestamp=1552819382575, value=v1111
1 row(s) in 0.0160 seconds

# 获取指定列的值,多个值使用数组表示
hbase(main):020:0> get 't1', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
COLUMN                                              CELL
 c1:                                                timestamp=1552819382575, value=v1111
 c2:                                                timestamp=1552819392398, value=v2
 c3:                                                timestamp=1552819398244, value=v3
3 row(s) in 0.0170 seconds

# 获取c1的值,获取4个版本的值,默认是按照时间戳降续排序的
hbase(main):021:0> get 't1', 'r1', {COLUMN => 'c1', VERSIONS => 4}
COLUMN                                              CELL
 c1:                                                timestamp=1552819382575, value=v1111
 c1:                                                timestamp=1552819376343, value=v111
 c1:                                                timestamp=1552819368993, value=v11
 c1:                                                timestamp=1552819362975, value=v1
4 row(s) in 0.0180 seconds

# 获取c1的3个版本值
hbase(main):027:0* get 't1', 'r1', {COLUMN => 'c1', VERSIONS => 3}
COLUMN                                               CELL
 c1:                                                 timestamp=1552819382575, value=v1111
 c1:                                                 timestamp=1552819376343, value=v111
 c1:                                                 timestamp=1552819368993, value=v11
3 row(s) in 0.0090 seconds

# 获取指定时间戳版本的列
hbase(main):022:0> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => 1552819376343}
COLUMN                                              CELL
 c1:                                                timestamp=1552819376343, value=v111
1 row(s) in 0.0170 seconds

hbase(main):023:0> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => 1552819376343, VERSIONS => 4}
COLUMN                                              CELL
 c1:                                                timestamp=1552819376343, value=v111
1 row(s) in 0.0130 seconds

# 获取rowKey=r1中的值等于v2的所有列
hbase(main):024:0> get 't1', 'r1', {FILTER => "ValueFilter(=, 'binary:v2')"}
COLUMN                                              CELL
 c2:                                                timestamp=1552819392398, value=v2
1 row(s) in 0.0510 seconds


hbase(main):025:0> get 't1', 'r1', {COLUMN => 'c1', ATTRIBUTES => {'mykey'=>'myvalue'}}
COLUMN                                              CELL
 c1:                                                timestamp=1552819382575, value=v1111
1 row(s) in 0.0100 seconds

5.5.4 删除某个列簇中的某个列delete

# 语法
delete '表名', '行键', '列簇名:列名'

delete 'users','xiaoming','info:age'

create 'tbl_test', 'columnFamily1'

put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value1'
put 'tbl_test', 'rowKey1', 'columnFamily1:column2', 'value2'

delete 'tbl_test', 'rowKey1', 'columnFamily1:column1'

5.5.5 删除某行数据deleteall

# 语法
deleteall '表名', '行键'

# 示例
deleteall 'users', 'xiaoming'

5.5.6 清空整个表的数据truncate

truncate的流程是先disable表,然后再drop表,最后重新create表

truncate '表名'

5.5.7 自增incr

# 语法
incr '表名', '行键', '列簇:列名', 步长值

# 示例 
# 注意:incr 可以对不存的行键操作,如果行键已经存在会报错,如果使用put修改了incr的值再使用incr也会报错
# ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: Field is not a long, it's 2 bytes wide
incr 'tbl_user', 'xiaohong', 'info:age', 1

5.5.8 计数器get_counter

# 点击量:日、周、月
create 'counters', 'daily', 'weekly', 'monthly'
incr 'counters', '20240415', 'daily:hits', 1
incr 'counters', '20110101', 'daily:hits', 1
get_counter 'counters', '20110101', 'daily:hits'

5.5.9 修饰词

1、修饰词
# 语法
scan '表名', {COLUMNS => [ '列簇名1:列名1', '列簇名1:列名2', ...]}

# 示例
scan 'tbl_user', {COLUMNS => [ 'info:id', 'info:age']}
2、TIMESTAMP 指定时间戳
# 语法
scan '表名',{TIMERANGE=>[timestamp1, timestamp2]}

# 示例
scan 'tbl_user',{TIMERANGE=>[1551938004321, 1551938036450]}
3、VERSIONS

默认情况下一个列只能存储一个数据,后面如果修改数据就会将原来的覆盖掉,可以通过指定VERSIONS时HBase一列能存储多个值。

create 'tbl_test', 'columnFamily1'
describe 'tbl_test'

# 修改列簇版本号
alter 'tbl_test', { NAME=>'columnFamily1', VERSIONS=>3 }

put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value1'
put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value2'
put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value3'

# 默认返回最新的一条数据
get 'tbl_test','rowKey1','columnFamily1:column1'

# 返回3个
get 'tbl_test','rowKey1',{COLUMN=>'columnFamily1:column1', VERSIONS=>3}
# 返回2个
get 'tbl_test','rowKey1',{COLUMN=>'columnFamily1:column1', VERSIONS=>2}
4、STARTROW

ROWKEY起始行。会先根据这个key定位到region,再向后扫描

# 语法
scan '表名', { STARTROW => '行键名'}

# 示例
scan 'tbl_user', { STARTROW => 'vbirdbest'}
5、STOPROW :截止到STOPROW行,STOPROW行之前的数据,不包括STOPROW这行数据
# 语法
scan '表名', { STOPROW => '行键名'}

# 示例
scan 'tbl_user', { STOPROW => 'xiaoming'}
6、LIMIT 返回的行数
# 语法
scan '表名', { LIMIT => 行数}

# 示例
scan 'tbl_user', { LIMIT => 2 }

5.5.10 FILTER条件过滤器

过滤器之间可以使用AND、OR连接多个过滤器。

1、ValueFilter 值过滤器
# 语法:binary 等于某个值
scan '表名', FILTER=>"ValueFilter(=,'binary:列值')"
# 语法 substring:包含某个值
scan '表名', FILTER=>"ValueFilter(=,'substring:列值')"

# 示例
scan 'tbl_user', FILTER=>"ValueFilter(=, 'binary:26')"
scan 'tbl_user', FILTER=>"ValueFilter(=, 'substring:6')"
2、ColumnPrefixFilter 列名前缀过滤器
# 语法 substring:包含某个值
scan '表名', FILTER=>"ColumnPrefixFilter('列名前缀')"

# 示例
scan 'tbl_user', FILTER=>"ColumnPrefixFilter('birth')"
# 通过括号、AND和OR的条件组合多个过滤器
scan 'tbl_user', FILTER=>"ColumnPrefixFilter('birth') AND ValueFilter(=,'substring:26')"
3、rowKey字典排序

Table中的所有行都是按照row key的字典排序的

posted @ 2024-05-11 10:13  peculiar-  阅读(3)  评论(0编辑  收藏  举报