1. 启动HBase
    [atguigu@hadoop102 hbase]$ bin/start-hbase.sh
  2. 关闭HBase
    [atguigu@hadoop102 hbase]$ bin/stop-hbase.sh
  3. 进入 HBase 客户端命令行
    [atguigu@hadoop102 hbase]$ bin/hbase shell
  4. 查看帮助命令
    hbase(main):001:0> help
  5. hbase数据怎么修改 hbase修改数据命令_命名空间

  6. DDL(操作表和命名空间本身的增删改查)
    DML(操作表内部的增删改查)

DDL

  1. 创建表
    hbase(main):002:0> create 'student','info' 一个是表名一个是列族
  2. 删除表
    首先需要先让该表为 disable 状态:
    hbase(main):019:0> disable 'student' 然后才能 drop 这个表:
    hbase(main):020:0> drop 'student' 提示:如果直接 drop 表,会报错:ERROR: Table student is enabled. Disable it first.
    truncate 'stu' 也是删除整个表,而且不用自己去disabled表
  3. 改变表信息
    将 info 列族中的数据存放 3 个版本:
    hbase(main):022:0> alter 'student',{NAME=>'info',VERSIONS=>3}
  4. 查看当前数据库中有哪些表
    hbase(main):002:0> list

hbase数据怎么修改 hbase修改数据命令_HBase_02


查看表结构

hbase(main):011:0> describe 'student'

命名空间
  1. 创建命名空间
    create_namespace 'bigdata' 在命名空间下创建表
    create 'bigdata:stu','info' 如果直接`create ‘student’,'info’是默认在default命名空间下创建表
  2. 删除命名空间
    要保证namespace是empty才能删除,所以先要删除在namespace下的表再删除表
    drop_namespace 'bigdata'

  3. 很少改

  4. list_namespace
  5. hbase数据怎么修改 hbase修改数据命令_hbase中怎么对数据修改_03


DML

1. 增加数据 put

hbase数据怎么修改 hbase修改数据命令_hbase中怎么对数据修改_04

put 'stu','1001','info1:name','zs'

在stu表的1001row上的info1列族里加一个叫name的列,值为zs

hbase数据怎么修改 hbase修改数据命令_HBase_05


put 'stu' ,'1002','info1:age','18'

在stu表的1002row上的info1列族里加一个叫age的列,值为18

hbase数据怎么修改 hbase修改数据命令_时间戳_06

put 'stu' ,'10010','info1:add','nj'

在stu表的10010row上的info1列族里加一个叫add的列,值为nj

scan查看表信息看到10010是在1002前面,而我们先创建1002再创建10010,说明HBase的row是按照字典排序的

hbase数据怎么修改 hbase修改数据命令_大数据_07


put 'stu' ,'1001','info1:add','bj'在stu表的1001row上的info1列族里加一个叫add的列,值为bj

hbase数据怎么修改 hbase修改数据命令_hbase中怎么对数据修改_08

2. 删除delete

hbase数据怎么修改 hbase修改数据命令_命名空间_09


delete 'stu', '1001', 'info:add' 删除stu表1001row下列族为info中列名为add的列,是删除操作的时间戳大于之间add下数据的时间戳,type为Delete,也就不显示数据了

hbase数据怎么修改 hbase修改数据命令_大数据_10


hbase数据怎么修改 hbase修改数据命令_HBase_11

发现的一个BUG

hbase数据怎么修改 hbase修改数据命令_hbase中怎么对数据修改_12


delete 'stu', '1001', 'info1'

明明删除info列族所有信息成功但是scan查看后还是存在,这时HBase的shell一个BUG,,以后我们可以在API下成功删除

deleteall

delete不可以删除rowkey,因为比须要三个参数
可以直接删除rowkey

deleteall 'stu', '1001'

hbase数据怎么修改 hbase修改数据命令_大数据_13

3. 修改put

依然是个put,显示时间戳最大的那个值,时间戳小的不显示,用户以为是改了但是实际上被覆盖了

hbase数据怎么修改 hbase修改数据命令_大数据_14


put 'stu' '1001' 'info1:name' 'ls' 把zs改成ls

hbase数据怎么修改 hbase修改数据命令_hbase中怎么对数据修改_15


如果我加一个ww,但是时间戳在ls之前,scan 'stu’后还是显示ls,就是前面说的时间戳问题

put ‘stu’, ‘1001’, ‘info1:name’, ‘ww’,1602310939550

scan 'stu', {RAW => true, VERSIONS => 10}就是查看最近10个版本数的历史信息,可以看到zs和ww还存在的

hbase数据怎么修改 hbase修改数据命令_hbase中怎么对数据修改_16

4. 查看 get 与 scan

  1. 按指定rowkey获取唯一一条记录:get方法,用法单一
    按指定条件获取一批记录:scan方法,还可以添加STARTROW、TIMERANGE和FITLER等高级功能

get

hbase> t.get 'r1'
  hbase> t.get 'r1', {TIMERANGE => [ts1, ts2]}
  hbase> t.get 'r1', {COLUMN => 'c1'}
  hbase> t.get 'r1', {COLUMN => ['c1', 'c2', 'c3']}
  hbase> t.get 'r1', {COLUMN => 'c1', TIMESTAMP => ts1}
  hbase> t.get 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2], VERSIONS => 4}
  hbase> t.get 'r1', {COLUMN => 'c1', TIMESTAMP => ts1, VERSIONS => 4}
  hbase> t.get 'r1', {FILTER => "ValueFilter(=, 'binary:abc')"}
  hbase> t.get 'r1', 'c1'
  hbase> t.get 'r1', 'c1', 'c2'
  hbase> t.get 'r1', ['c1', 'c2']
  hbase> t.get 'r1', {CONSISTENCY => 'TIMELINE'}
  hbase> t.get 'r1', {CONSISTENCY => 'TIMELINE', REGION_REPLICA_ID => 1}

例如:

获取一个id的所有数据

get 'table_name','row_index'

获取一个id,一个列族的所有数据

get 'table_name','row_index','info'

#获取一个id,一个列族中一个列的所有数据

get 'table_name','row_index','info:age'

scan

hbase> scan 'hbase:meta'
  hbase> scan 'hbase:meta', {COLUMNS => 'info:regioninfo'}
  hbase> scan 'ns1:t1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
  hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
  hbase> scan 't1', {COLUMNS => 'c1', TIMERANGE => [1303668804, 1303668904]}
  hbase> scan 't1', {REVERSED => true}
  hbase> scan 't1', {ALL_METRICS => true}
  hbase> scan 't1', {METRICS => ['RPC_RETRIES', 'ROWS_FILTERED']}
  hbase> scan 't1', {ROWPREFIXFILTER => 'row2', FILTER => "
1.限制条件
scan 'qy',{COLUMNS=>'name'}

hbase数据怎么修改 hbase修改数据命令_命名空间_17

scan 'qy',{COLUMNS=>'name:gender'}

hbase数据怎么修改 hbase修改数据命令_命名空间_18

scan 'qy',{COLUMNS=>['name','foo']}

hbase数据怎么修改 hbase修改数据命令_HBase_19

限制查找条数:

scan 'qy',{COLUMNS=>['name','foo'],LIMIT=>1}
scan 'qy',{COLUMNS=>['name','foo'],LIMIT=>2}

hbase数据怎么修改 hbase修改数据命令_命名空间_20

限制时间范围:

scan 'qy',{TIMERANGE=>[1448045892646,1448045892647]}

hbase数据怎么修改 hbase修改数据命令_HBase_21

2.filter 过滤部分

PrefixFilter:rowKey前缀过滤

scan 'qy',{FILTER=>"PrefixFilter('001')"}

hbase数据怎么修改 hbase修改数据命令_时间戳_22

scan 'qy',{FILTER=>PrefixFilter('t')}

hbase数据怎么修改 hbase修改数据命令_命名空间_23

QualifierFilter:列过滤器
QualifierFilter对列的名称进行过滤,而不是列的值。

scan 'qy',{FILTER=>"PrefixFilter('t') AND QualifierFilter(>=,'binary:b')"}

hbase数据怎么修改 hbase修改数据命令_hbase中怎么对数据修改_24

TimestampsFilter:时间戳过滤器

scan 'qy',{FILTER=>"TimestampsFilter(1448069941270,1548069941230)" }

hbase数据怎么修改 hbase修改数据命令_HBase_25

scan 'qy',{FILTER=>"(QualifierFilter(>=,'binary:b')) OR (TimestampsFilter(1348069941270,1548069941270))" }

hbase数据怎么修改 hbase修改数据命令_大数据_26