HBase(3)-HBase Shell 中DDL,DML命令演示

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yyl424525/article/details/77529364

DDL(Data Definition Language)数据定义语言:对数据库中的某些对象(例如,database,table)进行管理,如Create,Alter和Drop.
DML(Data Manipulation Language)数据操纵语言:对数据库中的数据进行一些简单操作,如insert,delete,update,select等.

1 常见命令和用法
(1)创建表:create ‘表名称’, ‘列名称1’,’列名称2’,’列名称N’
(2)删除表:先要屏蔽该表,才能对该表进行删除,第一步 disable ‘表名称’ 第二步 drop ‘表名称’
修改表结构:同样要先disable表的可用性
(3)插入记录:put ’< table name>’,’row name’,’< colfamily:colname>’,’< value>’
(4)查看记录:get ‘表名称’, ‘行名称’
查看指定列:get ‘table name’, ‘rowid’, {COLUMN => ‘column family:column name ’}
(5)查看表中的记录总数:count ‘表名称’
(6)删除记录:delete ‘表名’ ,’行名称’ , ‘列名称’
(7)查看所有记录:scan “表名称”
(8)查看某个表某个列中所有数据:scan “表名称” , [‘列名称:’]
(9)更新记录;就是重写一遍进行覆盖

2 示例演示
以网上的一个学生成绩表的例子来演示hbase的用法。
这里写图片描述
这里grad对于表来说是一个只有它自己的列族,course对于表来说是一个有两个列的列族,这个列族由两个列组成math和art,当然我们可以根据我们的需要在course中建立更多的列族,如computer,physics等相应的列添加入course列族。

2.1 创建表
建立一个表scores,有两个列族grad和courese
hbase(main):001:0>create ‘scores’,’grade’,’course’
0 row(s) in 2.1850 seconds
=> Hbase::Table - score
hbase(main):002:0>
可以使用list命令来查看当前HBase里有哪些表。使用describe命令来查看表结构。(记得所有的表明、列名都需要加上引号)

2.2 插入记录
按设计的表结构插入值:
put ‘scores’,’Tom’,’grade:’,’5′
put ‘scores’,’Tom’,’course:math’,’97′
put ‘scores’,’Tom’,’course:art’,’87′
put ‘scores’,’Jim’,’grade’,’4′
put ‘scores’,’Jim’,’course:’,’89′
put ‘scores’,’Jim’,’course:’,’80′
这样表结构就起来了,其实比较自由,列族里边可以自由添加子列很方便。如果列族下没有子列,加不加冒号都是可以的。
put命令比较简单,只有这一种用法:
hbase> put ‘t1′, ‘r1′, ‘c1′, ‘value’, ts1
t1指表名,r1指行键名,c1指列名,value指单元格值。ts1指时间戳,一般都省略掉了。

2.3 查看记录
根据键值查询数据
get ‘scores’,’Jim’
get ‘scores’,’Tom’
get ‘scores’,’Jim’,’grade’
get ‘scores’,’Tom’,’course’

hbase(main):009:0> get ‘scores’,’Jim’
COLUMN CELL
course: timestamp=1503542329834, value=80
grade: timestamp=1503542278372, value=4
2 row(s) in 0.0610 seconds
//可以看出Jim的成绩只有一个,被覆盖了

hbase(main):010:0> get ‘scores’,’Tom’
COLUMN CELL
course:art timestamp=1503542265272, value=87
course:math timestamp=1503542249261, value=97
grade: timestamp=1503542232113, value=5
3 row(s) in 0.0390 seconds
hbase(main):011:0>

hbase(main):011:0> get ‘scores’,’Jim’,’grade’
COLUMN CELL
grade: timestamp=1503542278372, value=4
1 row(s) in 0.0270 seconds

hbase(main):012:0> get ‘scores’,’Tom’,’course’
COLUMN CELL
course:art timestamp=1503542265272, value=87
course:math timestamp=1503542249261, value=97
2 row(s) in 0.0320 seconds

可能你就发现规律了,HBase的shell操作,一个大概顺序就是操作关键词后跟表名,行名,列名这样的一个顺序,如果有其他条件再用花括号加上。
get有用法如下:
hbase> get ‘t1′, ‘r1′
hbase> get ‘t1′, ‘r1′, {TIMERANGE => [ts1, ts2]}
hbase> get ‘t1′, ‘r1′, {COLUMN => ‘c1′}
hbase> get ‘t1′, ‘r1′, {COLUMN => [‘c1’, ‘c2’, ‘c3’]}
hbase> get ‘t1′, ‘r1′, {COLUMN => ‘c1′, TIMESTAMP => ts1}
hbase> get ‘t1′, ‘r1′, {COLUMN => ‘c1′, TIMERANGE => [ts1, ts2], VERSIONS => 4}
hbase> get ‘t1′, ‘r1′, {COLUMN => ‘c1′, TIMESTAMP => ts1, VERSIONS => 4}
hbase> get ‘t1′, ‘r1′, ‘c1′
hbase> get ‘t1′, ‘r1′, ‘c1′, ‘c2′
hbase> get ‘t1′, ‘r1′, [‘c1’, ‘c2’]

例如:
hbase(main):013:0> get ‘scores’,’Tom’,{COLUMN=>’course’}
COLUMN CELL
course:art timestamp=1503542265272, value=87
course:math timestamp=1503542249261, value=97
2 row(s) in 0.0320 seconds

hbase(main):015:0> get ‘scores’,’Tom’,{COLUMN=>[‘course’,’grade’]}
COLUMN CELL
course:art timestamp=1503542265272, value=87
course:math timestamp=1503542249261, value=97
grade: timestamp=1503542232113, value=5
3 row(s) in 0.0270 seconds

hbase(main):016:0> get ‘scores’,’Tom’,[‘course’,’grade’]
COLUMN CELL
course:art timestamp=1503542265272, value=87
course:math timestamp=1503542249261, value=97
grade: timestamp=1503542232113, value=5
3 row(s) in 0.0460 seconds

hbase(main):017:0> get ‘scores’,’Tom’,’course’,’grade’
COLUMN CELL
course:art timestamp=1503542265272, value=87
course:math timestamp=1503542249261, value=97
grade: timestamp=1503542232113, value=5
3 row(s) in 0.0620 seconds

2.4 扫描所有数据
hbase(main):018:0> scan ‘scores’
ROW COLUMN+CELL
Jim column=course:, timestamp=1503542329834, value=80
Jim column=grade:, timestamp=1503542278372, value=4
Tom column=course:art, timestamp=1503542265272, value=87
Tom column=course:math, timestamp=1503542249261, value=97
Tom column=grade:, timestamp=1503542232113, value=5
2 row(s) in 0.0570 seconds

也可以指定一些修饰词:TIMERANGE, FILTER, LIMIT, STARTROW, STOPROW, TIMESTAMP, MAXLENGTH,or COLUMNS。没任何修饰词,就是上边例句,就会显示所有数据行。
例句如下:
hbase> scan ‘.META.’
hbase> scan ‘.META.’, {COLUMNS => ‘info:regioninfo’}
hbase> scan ‘t1′, {COLUMNS => [‘c1’, ‘c2’], LIMIT => 10, STARTROW => ‘xyz’}
hbase> scan ‘t1′, {COLUMNS => ‘c1′, TIMERANGE => [1303668804, 1303668904]}
hbase> scan ‘t1′, {FILTER => “(PrefixFilter (‘row2′) AND (QualifierFilter (>=, ‘binary:xyz’))) AND (TimestampsFilter ( 123, 456))”}
hbase> scan ‘t1′, {FILTER => org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)}

如:
hbase(main):023:0> scan ‘scores’,{COLUMNS=>’course’}
ROW COLUMN+CELL
Jim column=course:, timestamp=1503542329834, value=80
Tom column=course:art, timestamp=1503542265272, value=87
Tom column=course:math, timestamp=1503542249261, value=97
2 row(s) in 0.0360 seconds

按 rowkey 模糊查询(最左前缀匹配)总行数:下面的例子会统计 r1* 的总行数:
hbase(main):024:0> scan ‘scores’, {FILTER => org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes(‘Tom’))}
ROW COLUMN+CELL
Tom column=course:art, timestamp=1503542265272, value=87
Tom column=course:math, timestamp=1503542249261, value=97
Tom column=grade:, timestamp=1503542232113, value=5
1 row(s) in 0.0600 seconds

过滤器filter有两种方法指出:
a. Using a filterString – more information on this is available in the
Filter Language document attached to the HBASE-4176 JIRA
b. Using the entire package name of the filter.
还有一个CACHE_BLOCKS修饰词,开关scan的缓存的,默认是开启的(CACHE_BLOCKS=>true),可以选择关闭(CACHE_BLOCKS=>false)。

2.5 删除记录或指定数据
delete ‘scores’,’Jim’,’grade’
删除数据命令也没太多变化,只有一个:
hbase> delete ‘t1′, ‘r1′, ‘c1′, ts1
另外有一个deleteall命令,可以进行整行的范围的删除操作,慎用!
如果需要进行全表删除操作,就使用truncate命令,其实没有直接的全表删除命令,这个命令也是disable,drop,create三个命令组合出来的。

2.6 修改表结构
disable ‘scores’
alter ‘scores’,NAME=>’info’
enable ‘scores’
alter命令使用如下(如果无法成功的版本,需要先通用表disable,更改过后再enable,否则scan等命令不能使用),且NAME不能为小写:
a、改变或添加一个列族:
增加一个列族
hbase(main):041:0> alter ‘scores’,NAME=>’course’,VERSIONS=>5
增加一个名为friends的列族,可选择加VERSION表示最大列族单元的属性
hbase(main):051:0> alter ‘scores’,NAME=>’friends’
改变一个列族属性

b、删除一个列族:
命令:hbase> alter ‘t1′, NAME => ‘f1′, METHOD => ‘delete’
hbase(main):064:0> alter ‘scores’,NAME=>’friends’,METHOD=>’delete’
命令:hbase> alter ‘t1′, ‘delete’ => ‘f1′
hbase(main):068:0> alter ‘scores’,NAME=>’test’,VERSION=>5
hbase(main):069:0> alter ‘scores’,’delete’=>’test’
c、也可以修改表属性如
MAX_FILESIZE,MEMSTORE_FLUSHSIZE, READONLY,和 DEFERRED_LOG_FLUSH
命令:hbase> alter ‘t1′, METHOD => ‘table_att’, MAX_FILESIZE => ’134217728′
hbase(main):072:0> alter ‘scores’,METHOD=>’table_att’,MAX_FILESIZE=>’13444444’
d、可以添加一个表协同处理器
命令:hbase> alter ‘t1′, METHOD => ‘table_att’, ‘coprocessor’=> ‘hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2′
一个表上可以配置多个协同处理器,一个序列会自动增长进行标识。加载协同处理器(可以说是过滤程序)需要符合以下规则:
[coprocessor jar file location] | class name | [priority] | [arguments]
e、移除coprocessor如下:
hbase> alter ‘t1′, METHOD => ‘table_att_unset’, NAME => ‘MAX_FILESIZE’
hbase> alter ‘t1′, METHOD => ‘table_att_unset’, NAME => ‘coprocessor$1′
f、可以一次执行多个alter命令:
命令:hbase> alter ‘t1′, {NAME => ‘f1′}, {NAME => ‘f2′, METHOD => ‘delete’}
删除列test,增加列test2
hbase(main):080:0> alter ‘scores’,{NAME=>’test2’},{NAME=>’test’,METHOD=>’delete’}

2.7. hbase shell脚本
既然是shell命令,当然也可以把所有的hbase shell命令写入到一个文件内,想Linux shell脚本程序那样去顺序的执行所有命令。如同写linux shell,把所有hbase shell命令书写在一个文件内,然后执行如下命令即可:
vi test
create ‘test’, ‘cf’
list ‘test’
put ‘test’, ‘row1’, ‘cf:a’, ‘value1’
put ‘test’, ‘row2’, ‘cf:b’, ‘value2’
put ‘test’, ‘row3’, ‘cf:c’, ‘value3’
put ‘test’, ‘row4’, ‘cf:d’, ‘value4’
scan ‘test’
get ‘test’, ‘row1’
disable ‘test’
enable ‘test’

$ hbase shell test
方便好用。

猜你喜欢

转载自blog.csdn.net/yyl424525/article/details/77529364