目录
一、创建表:
1. 创建表时指定列族的属性
2. 创建表时不指定列族的属性
多学一招:克隆表
二、查看表信息
三、查看表
四、停用和启用表
1. 停用表
2. 启用表
多学一招:停用或启用多个表
五、判断表
1. exists命令
2. is_enabled命令
3. is_disabled命令
六、修改表
1. 修改表属性
(1)添加属性
(2)删除属性
2. 修改列族
(1)修改列族属性
(2)添加列族
(3)删除列族
七、删除表
drop命令
多学一招:删除多个表
create '[namespace:]table_name',
{NAME => 'columnfamily',CF_PROPERTY_NAME=>'CF_PROPERTY_VALUE',……},
{NAME => 'columnfamily',CF_PROPERTY_NAME=>'CF_PROPERTY_VALUE',……},……
[,TABLE_PROPERTY_NAME =>'TABLE_PROPERTY_VALUE',
TABLE_PROPERTY_NAME =>'TABLE_PROPERTY_VALUE',……]
namespace为可选,用于指定表所属的命名空间。
table_name用于指定表的名称。
columnfamily用于指定列族的名称。
CF_PROPERTY_NAME和CF_PROPERTY_VALUE用于根据HBase为列族定义的预定义属性来指定列族的属性及其属性值。
TABLE_PROPERTY_NAME和TABLE_PROPERTY_VALUE为可选,用于根据HBase为表定义的预定义属性来指定表的属性及其属性值。
create '[namespace:]table_name','columnfamily','columnfamily',...
[,'TABLE_PROPERTY_NAME' => 'TABLE_PROPERTY_VALUE',...]
接下来,演示如何在创建表时不指定列族的属性。这里在命名空间default创建表user_info,指定表的列族为person和address,在HBase Shell执行如下命令。
create 'user_info','person','address';
除了通过HBase Shell提供的create命令创建表之外,HBase Shell还提供了clone_table_schema命令,可以基于已存在的表克隆一个新表,从而实现创建表的目的。新表与被克隆的表具有相同的元数据,但不包含被克隆表的数据。关于克隆表的语法格式如下。
clone_table_schema '[namespace:]table_name','[namespace:]new_table_name' [,'split_key']
table_name:指定被克隆的表名
new_table_name:指定新表的表名
split_key:可选,用于指定新表是否包含被克隆表的Region拆分信息
例如,通过克隆命名空间school的表teacher_info,在命名空间default创建表student_info,具体命令如下。
clone_table_schema 'school:teacher_info','student_info';
HBase Shell提供了desc命令用于查看表信息,表信息的内容包含表的状态信息,以及表和列族的属性信息。关于查看表信息的语法格式如下。
desc '[namespace:]table_name'
HBase Shell提供了list命令用于查看表,该命令可以列出用户创建的所有表,也可以使用正则表达式对用户创建的所有表进行筛选。关于查看表的语法格式如下。
list '[[namespace:]regular]'
namespace:可选,用于指定命名空间,如果不指定命名空间,那么正则表达式会对用户创建的所有表进行筛选.
regular:用于指定正则表达式
[[namespace:]regular]:可选,用于通过正则表达式对指定命名空间中用户创建的所有表进行筛选
#查看用户创建的所有表
> list
#通过正则表达式“.*:t.*”对用户创建的所有表进行筛选,匹配表名以字母“t”开头的表
> list '.*:t.*'
#说明:list: 这是 HBase Shell 中用于列出表的命令。
'*.:t.*': 这是一个通配符表达式,用于匹配表名。
*.: 匹配任何命名空间(. 表示命名空间分隔符)。
:t.: 匹配以 :t 开头的部分。
.*: 匹配任意字符序列。
#通过正则表达式“u.*”对命名空间default中用户创建的所有表进行筛选,匹配表名以字母“u”开头的表
> list 'default:u.*'
HBase中表的状态分为停用和启用,当表处于停用状态时,用户无法访问和操作表中的数据。默认情况下,用户创建的表为启用状态。
停用表的主要目的是在进行某些特定操作时,保护表中的数据不受并发访问的干扰,从而确保数据的一致性和完整性。例如,执行诸如修改表、删除表、数据迁移等操作。
disable '[namespace:]table_name'
启用表的主要目的是在完成表的维护或修改操作后,允许用户重新访问和操作表中的数据。
enable '[namespace:]table_name'
#停用多个表
disable_all '[namespace:]regular'
#启用多个表
enable_all '[namespace:]regular'
演示如何使用正则表达式“.*:.*_info$”来匹配表名,停用用户创建的所有表中表名以字符串_info结尾的表
disable_all '.*:.*_info$'
exits命令用于判断表是否存在,当该命令返回结果为true时,表示表存在;若返回结果为false,则表示表不存在
exists '[namespace:]table_name'
演示如何判断命名空间school是否存在表student_info,在HBase Shell执行如下命令。
exists 'school:student_info'
is_enabled命令用于判断表是否处于启用状态,当该命令返回结果为true时,表示表处于启用状态;若返回结果为false,则表示表处于停用状态
is_enabled '[namespace:]table_name'
演示如何判断命名空间default的表user_info是否处于启用状态
is_enabled 'user_info'
is_disabled命令用于判断表是否处于停用状态,当该命令返回结果为true时,表示表处于停用状态;若返回结果为false,则表示表处于启用状态
is_disabled '[namespace:]table_name'
演示如何判断命名空间school的表teacher_info是否处于停用状态
is_disabled 'school:teacher_info'
添加属性表示根据表的预定义属性为表添加属性及其属性值,如果添加的属性在表中已存在,那么可以根据指定的属性值来修改该属性的属性值。
alter '[namespace:]table_name',TABLE_PROPERTY_NAME =>
'TABLE_PROPERTY_VALUE'[,TABLE_PROPERTY_NAME => 'TABLE_PROPERTY_VALUE',……]
#TABLE_PROPERTY_NAME 属性名
#TABLE_PROPERTY_VALUE 属性值
演示如何为命名空间school的表teacher_info添加属性,具体需求如下。
1.添加预定义属性READONLY,并指定属性值为true。
alter 'school:teacher_info',MERGE_ENABLED => 'true',READONLY => 'true'
alter '[namespace:]table_name',METHOD => 'table_att_unset'
,NAME => 'TABLE_PROPERTY_NAME'
接下来,我们演示如何删除命名空间school中表teacher_info的自定义属性comment
alter 'school:teacher_info',METHOD => 'table_att_unset',
NAME => 'comment'
修改列族属性是指根据列族的预定义属性对列族的属性进行调整
alter '[namespace:]table_name',
{NAME => 'columnfamily',CF_PROPERTY_NAME=>'CF_PROPERTY_VALUE'
[,CF_PROPERTY_NAME=>'CF_PROPERTY_VALUE',......]}
[,{NAME => 'columnfamily',CF_PROPERTY_NAME=>'CF_PROPERTY_VALUE'
[,CF_PROPERTY_NAME=>'CF_PROPERTY_VALUE',......]},
......]
#columnfamily,指定列族的名称
#CF_PROPERTY_NAME,指定预定义属性
#CF_PROPERTY_VALUE,指定预定义属性对应的属性值
演示如何对命名空间school的表teacher_info中列族grade1的属性进行修改,具体需求如下。
alter 'school:teacher_info',{NAME => 'grade1',VERSIONS => 3,BLOCKSIZE => 131072}
添加列族是指在表中添加一个或多个新的列族。在添加列族时,可以根据列族的预定义属性进行相应的配置。
alter '[namespace:]table_name',
{NAME => 'columnfamily'[,'CF_PROPERTY_NAME'=>'CF_PROPERTY_VALUE',......]}
[,{NAME =>'columnfamily'[,'CF_PROPERTY_NAME'=>'CF_PROPERTY_VALUE',......]}
,......]
演示如何在命名空间school的表teacher_info中添加列族,具体需求如下。
2.添加列族grade4,并通过预定义属性VERSIONS,将列族存储数据的最大版本数调整为2
alter 'school:teacher_info',{NAME => 'grade3'},{NAME => 'grade4',VERSIONS => 2}
删除列族表示删除表的指定列族,并删除列族存储的数据
alter '[namespace:]table_name','delete' => 'columnfamily'
#delete:删除列族
#columnfamily:指定列族的名称
演示如何删除命名空间school中表teacher_info的列族grade4
alter 'school:teacher_info','delete' => 'grade4'
drop命令用于删除表,被删除的表必须处于停用状态
drop '[namespace:]table_name'
演示如何删除命名空间school的表teacher_info
1.判断表teacher_info是否处于停用状态
is_disabled 'school:teacher_info'
2.删除命名空间school的表teacher_info
drop 'school:teacher_info'
删除多个表时,逐个执行drop命令可能会非常耗时。为了提高效率,HBase Shell提供了drop_all命令。该命令可以根据指定的正则表达式来匹配表名,并对符合条件的表执行删除操作。
drop_all '[namespace:]regular'
演示如何使用正则表达式“s.*”来匹配表名,删除命名空间default中表名以字母“s”开头的所有表。
drop_all 'default:s.*'
删除的多个表都要处于停用状态!!!!!