Hbase操作手册

一:Hbase 创建数据库表

1.进入hbase shell

2.创建数据库表的命令:create '表名', '列族名1','列族名2','列族名N'

3.如果想查看所有数据库表,可以使用list 命令:

4.可以看到,刚创建的数据库表user 已经在数据库表的列表中,如果要看user表的结构,可以用命令:describe 'user'

二:Hbase数据库表数据的增、删、改、查

1.Hbase 增加数据的语法格式如下:
put '表名', 'rowKey', '列族 : 列' , '值'

2.Hbase查询数据的语法格式如下:

通过命令:scan '表名' 来查看表的所有记录

3.count '表名' 来查看表中的所有记录的数量(根据rowKey来计算)

4.通过命令:get '表名','rowkey','列族' 来查看某个rowKey列族的记录

get '表名','rowkey','列族:列' 来查看rowKey列族的某个列记录

5.Hbase删除数据的语法格式如下:

通过命令:delete '表名','行名','列族:列' 来删除某个记录

  1. get来查询删除的记录是否删除成功:
    get '表名','行名','列族:列'

7.deleteall '表名','rowkey' 来删除整行记录

  1. scan '表名' 来查看整个表的记录来看是否删除成功:

9.truncate '表名' 来清空表所有的记录

10.Hbase更新数据的语法格式如下:

通过命令:put就是重写一遍,进行覆盖,hbase没有修改,都是追加即对相同rowKey、列族和时间戳的数据再次添加即为数据的更新

比如:put 'user','1234','info1:name','zhangsan'

三:Hbase 删除数据库表

1.Hbase 删除数据库的语法格式如下(drop '表名'):

在删除表时,先要屏蔽该表,才能对该表进行删除

第一步: disable '表名',第二步 :drop '表名'

  1. Disable 表后可以通过命令:is_enabled '表名' ,查看当前表是否可用

3.false(不可用)。 通过drop命令对表进行删除:

4.最后用list命令查看user是否已被成功删除:

四:过滤器

一般需要配合比较运算符或比较器共同使用

使用过滤器的语法格式如下所示:
scan '表名',{Filter => "过滤器(比较运算符,'比较器')"}
1.行键过滤器

(1)RowFilter:针对行键进行过滤

例1:显示行键前缀为0开头的键值对;

scan'student',{FILTER=>"RowFilter(=,'substring:001')"}

(2)PrefixFilter:行键前缀过滤器

例2:扫描前缀为001的行键

scan'student',FILTER=>"PrefixFilter('001')"

(3)FirstKeyOnlyFilter:扫描全表,显示每个逻辑行的第一个键值对

例4:scan 'student',FILTER=>"FirstKeyOnlyFilter()"

(4)InclusiveStopFilter:替代ENDROW返回终止条件行;

例5:扫描显示行键001到002范围内的键值对

scan 'student', {STARTROW=>'001',FILTER =>"InclusiveStopFilter('002')"}

此条命令等同于:

scan 'student', {STARTROW=>'001',ENDROW => '003'}
2.列族与列过滤器

(1)FamilyFilter:针对列族进行比较和过滤。

例1:显示列族前缀为stu开头的键值对;

scan'student',FILTER=>"FamilyFilter(=,'substring:stu')"

(2)QualifierFilter:列标识过滤器。

例2:显示列名为name的记录; scan'student',FILTER=>"QualifierFilter(=,'substring:name')"

(3)ColumnPrefixFilter:对列名前缀进行过滤。

例2:显示列名为name的记录;

scan'student',FILTER=>"ColumnPrefixFilter('name')"
等价于scan'student',FILTER=>"QualifierFilter(=,'substring:name')"

(4)MultipleColumnPrefixFilter:可以指定多个前缀

例3:显示列名为name和age的记录;

scan 'student',FILTER=>"MultipleColumnPrefixFilter('name','age')"

(5)ColumnRangeFilter :设置范围按字典序对列名进行过滤; scan'student',FILTER=>"ColumnRangeFilter('bi',true,'na',true)"
3.值过滤器

(1)ValueFilter :值过滤器。

例1:查询值等于19的所有键值对

scan'student',FILTER=>"ValueFilter(=,'binary:19') " scan'student',FILTER=>"ValueFilter(=,'substring:19')

(2)SingleColumnValueFilter :在指定的列族和列中进行值过滤器。

例2:查询stuinfo列族age列中值等于19的所有键值对

scan'student',{COLUMN=>'stuinfo:age',FILTER=>"SingleColumnValueFilter('stuinfo','age',=,'binary:19')"}
4.其他过滤器

(1)ColumnCountGetFilter :限制每个逻辑行返回的键值对数

例1:返回行键为001的前3个键值对

get 'student','001',FILTER=>"ColumnCountGetFilter(3)"

(2)PageFilter :基于行的分页过滤器,设置返回行数。

例2:显示一行

scan'student',FILTER=>"PageFilter(1)"

(3)ColumnPaginationFilter :基于列的进行分页过滤器,需要设置偏移量与返回数量 。

例3:显示每行第1列之后的2个键值对scan'student',FILTER=>"ColumnPaginationFilter(2,1)"

五:例题

实操题

(1) 启动HBase

cd /opt/hbase-1.2.6/bin/ 进入hbase安装的bin目录下

./start-hbase.sh
(2) 连接HBase实例

hbase shell
(3) 查看存在哪些表

list
(4) 创造表people,表中有列簇info

create 'people','info'
(5) 向people表的列族info中添加数据(数据根据上表内容填写)

put 'people','1001','info:name','jenny'

put 'people','1002','info:name','sam'

put 'people','1002','info:age','20'
(6) people表添加一个列簇salary

alter 'people','salary'
(7) 查看people表结构

describe 'people'
(8) 向people表的列族salary中添加数据,并且base列的版本号(时间戳)都自定义为"1"(数据根据上表内容填写)

put 'people','1001','salary:base','2000',1

put 'people','1002','salary:base','1300',1

put 'people','1002','salary:subsidy','500'
(9) 修改行键1002的列族salary的base列的值为1800,版本号为"2"

put 'people','1002','salary:base','1800',2
(10) 查看people表的所有的数据

scan 'people'
(11) 查看行键1002的列族salary的base列的版本号为1的值

get 'people','1002',{COLUMN=>'salary:base',TIMESTAMP=>1}
(12) 使用"FamilyFilter"过滤器显示列族前缀为"sa"开头的键值对

scan 'people',FILTER=>"FamilyFilter(=,'substring:sa')"
(13) 使用"RowFilter"过滤器显示行键等于1001的键值对

scan 'people',FILTER=>"RowFilter(=,'binary:1001')"
(14) 使用"ValueFilter"过滤器查询base值大于等于2000的所有键值对

scan 'people',FILTER=>"ColumnPrefixFilter('base') AND ValueFilter(>=,'binary:2000') "
(15) 删除行键为1002,列族为info,列为age的数据

delete 'people','1002','info:age'
(16) 清空表people

truncate 'people'
(17) 删除表

drop 'people'

相关推荐
夏木~1 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle
W21551 小时前
Liunx下MySQL:表的约束
数据库·mysql
黄名富1 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
言、雲1 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
一个程序员_zhangzhen2 小时前
sqlserver新建用户并分配对视图的只读权限
数据库·sqlserver
zfj3212 小时前
学技术学英文:代码中的锁:悲观锁和乐观锁
数据库·乐观锁··悲观锁·竞态条件
吴冰_hogan2 小时前
MySQL InnoDB 存储引擎 Redo Log(重做日志)详解
数据库·oracle
nbsaas-boot2 小时前
探索 JSON 数据在关系型数据库中的应用:MySQL 与 SQL Server 的对比
数据库·mysql·json
cmdch20172 小时前
Mybatis加密解密查询操作(sql前),where要传入加密后的字段时遇到的问题
数据库·sql·mybatis
程序员学习随笔2 小时前
PostgreSQL技术内幕21:SysLogger日志收集器的工作原理
数据库·postgresql