Hbase-表操作

目录

一、创建表:

1.  创建表时指定列族的属性

2.  创建表时不指定列族的属性

多学一招:克隆表

二、查看表信息

三、查看表

四、停用和启用表

1.  停用表

2.  启用表

多学一招:停用或启用多个表

五、判断表

1.  exists命令

2.  is_enabled命令

3.  is_disabled命令

六、修改表

1.  修改表属性

(1)添加属性

(2)删除属性

2.  修改列族

(1)修改列族属性

(2)添加列族

(3)删除列族

七、删除表

drop命令

多学一招:删除多个表


一、创建表:

1.  创建表时指定列族的属性

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为表定义的预定义属性来指定表的属性及其属性值。

2.  创建表时不指定列族的属性

create '[namespace:]table_name','columnfamily','columnfamily',...
[,'TABLE_PROPERTY_NAME' => 'TABLE_PROPERTY_VALUE',...]

接下来,演示如何在创建表时不指定列族的属性。这里在命名空间default创建表user_info,指定表的列族为personaddress,在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中表的状态分为停用启用,当表处于停用状态时,用户无法访问操作表中的数据。默认情况下,用户创建的表为启用状态

1.  停用表

停用表的主要目的是在进行某些特定操作时,保护表中的数据不受并发访问的干扰,从而确保数据的一致性完整性。例如,执行诸如修改表删除表数据迁移等操作。

disable '[namespace:]table_name'

2.  启用表

启用表的主要目的是在完成表的维护或修改操作后,允许用户重新访问操作表中的数据。

enable '[namespace:]table_name'

多学一招:停用或启用多个表

#停用多个表
disable_all '[namespace:]regular'
#启用多个表
enable_all '[namespace:]regular'

演示如何使用正则表达式.*:.*_info$”匹配表名,停用用户创建的所有表中表名以字符串_info结尾的表

disable_all '.*:.*_info$'

五、判断表

1.  exists命令

exits命令用于判断表是否存在,当该命令返回结果为true时,表示表存在;若返回结果为false,则表示表不存在

exists '[namespace:]table_name' 

演示如何判断命名空间school是否存在表student_info,在HBase Shell执行如下命令。

exists 'school:student_info'

2.  is_enabled命令

is_enabled命令用于判断表是否处于启用状态,当该命令返回结果为true时,表示表处于启用状态;若返回结果为false,则表示表处于停用状态

is_enabled '[namespace:]table_name'

演示如何判断命名空间default的表user_info是否处于启用状态

is_enabled 'user_info'

3.  is_disabled命令

is_disabled命令用于判断表是否处于停用状态,当该命令返回结果为true时,表示表处于停用状态;若返回结果为false,则表示表处于启用状态

is_disabled '[namespace:]table_name'

演示如何判断命名空间school的表teacher_info是否处于停用状态

is_disabled 'school:teacher_info'

六、修改表

1.  修改表属性

1)添加属性

添加属性表示根据表的预定义属性为表添加属性及其属性值,如果添加的属性在表中已存在,那么可以根据指定的属性值来修改该属性的属性值。

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

2.添加预定义属性 MERGE_ENABLED ,并指定 属性值为 true
alter 'school:teacher_info',MERGE_ENABLED => 'true',READONLY => 'true'
2)删除属性
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'

2.  修改列族

(1)修改列族属性

修改列族属性是指根据列族的预定义属性对列族的属性进行调整

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属性进行修改,具体需求如下。

1. 通过列族的预定义属性 VERSIONS ,将列族存储数据的 最大版本数 调整为 3
2. 通过列族的预定义属性 BLOCKSIZE ,将列族的 HFile 每个数据块 的大小调整为 131072
alter 'school:teacher_info',{NAME => 'grade1',VERSIONS => 3,BLOCKSIZE => 131072}

2)添加列族

添加列族是指在表中添加一个或多个新的列族。在添加列族时,可以根据列族的预定义属性进行相应的配置

alter '[namespace:]table_name',
{NAME => 'columnfamily'[,'CF_PROPERTY_NAME'=>'CF_PROPERTY_VALUE',......]}
[,{NAME =>'columnfamily'[,'CF_PROPERTY_NAME'=>'CF_PROPERTY_VALUE',......]}
,......]

演示如何在命名空间school的表teacher_info添加列族,具体需求如下。

1. 添加列族 grade3

2.添加列族grade4,并通过预定义属性VERSIONS,将列族存储数据的最大版本数调整为2

alter 'school:teacher_info',{NAME => 'grade3'},{NAME => 'grade4',VERSIONS => 2}

3)删除列族

删除列族表示删除表的指定列族,并删除列族存储的数据

alter '[namespace:]table_name','delete' => 'columnfamily'
#delete:删除列族
#columnfamily:指定列族的名称

演示如何删除命名空间school中表teacher_info的列族grade4

alter 'school:teacher_info','delete' => 'grade4'

七、删除表

drop命令

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.*'

删除的多个表都要处于停用状态!!!!!

你可能感兴趣的:(Hbase,hbase,大数据,数据分析,非关系型数据库,zookeeper)