1.创建表
语法: create ‘表名’,‘列簇名’……
eg:创建一个学生表,表名为STUDENT,该表由一个列簇为A1
create 'STUDENT','A1'
备注:create要小写,一个表可以包含若干个列簇(能用一个列簇解决,绝不用两个)
2.查看表
语法:list
eg:查看所有表
list
3.禁用表/启用表
3.1禁用表
语法:disable ‘表名’
eg:禁用STUDENT表
disable 'STUDENT'
3.2启用表
语法:enable ‘表名’
eg:启用STUDENT表
enable 'STUDENT'
4.删除表
语法:drop ‘表名’
eg:删除STUDENT表
disable 'STUDENT' drop 'STUDENT'
备注:删除表之前必须先禁用该表
5.添加数据
语法: put ‘表名’ ,‘rowkey’,‘列簇名:列名’,‘列值’
eg:向STUDENT表添加数据学生id的值,姓名,性别
put 'STUDENT','00001','A1:id','1' put 'STUDENT','00001','A1:name','张三' put 'STUDENT','00001','A1:sex','男'
备注:put一次只能保存一个列的值
6.查看添加的数据
语法:get ‘表名’,‘rowkey’
eg:查看STUDENT表中00001行的数据
get 'STUDENT','00001'
备注:使用get命令获取一行的数据
7.显示中文
需要在get 命令后添加一个属性{FORMATTER => 'toString'}
get 'STUDENT','00001', {FORMATTER => 'toString'}
备注: { key => value},这个是Ruby语法,表示定义一个HASH结构
8.更新数据操作
1.该操作和添加数据完全相同,
2.如果指定rowkey的列簇中的列下已经有值,则会覆盖之前的值,并且生成新的timestamp
3.HBase会自动维护数据的版本
9.删除数据操作
9.1删除指定的单元格
语法:delete ‘表名’, ‘rowkey’, ‘列蔟:列’
eg:删除rowkey为00001学生的性别
delete 'STUDENT,'00001','A1:sex'
9.2删除整行数据
语法:deleteall ‘表名’,‘rowkey’
eg:删除rowkey为00001学生的所有数据
deleteall 'STUDENT','00001'
10.清空表
语法:truncate ‘表名’
eg:清空STUDENT表中所有数据
truncate 'STUDENT'
备注:truncate表之前不需要disable,系统会自动限制性disable,在执行truncate。
11计数操作
语法:count ‘表名’
eg:统计STUDENT表中所有数据
count 'STUDENT'
备注:count统计可以理解为单线程程序,不断累加数据的条数,如果数据量比较大,会比较耗费时间。
解决方法:当数据量较大时,可以采用hbase提供的统计行数的MR进行统计
hbase org.apache.hadoop.hbase.mapreduce.RowCounter '表名'
备注:此方法仅限于数据量大时使用,因为启动MR需要耗费大量的时间。
12扫描表操作
语法:scan ‘表名’[,{FORMATTER=>‘toString’}]
场景:该表用于扫描整个表
eg:扫面STUDENT表中的数据
scan 'STUDENT',{FORMATTER => 'toString'}
备注:此操作慎用,在扫描大表的时候会严重浪费系统性能。
解决方法:只展示前面一部分数据
eg:扫描整个表,只展示前三条数据,并且结果中只展示学生id和学生姓名。
scan 'STUDENT',{LIMIT => 3,columns =>['A:id','A:name'],FORMATTER => 'toString'}
常用的过滤器:
语法说明:
scan '表名', { FILTER => "过滤器(比较运算符, '比较器表达式')" } 常见的过滤器: rowkey的过滤器: RowFilter PrefixFilter 列族过滤器: FamilyFilter 列名过滤器: QualifierFilter 列值过滤器: ValueFilter SingleColumnValueFilter 分页过滤器: PageFilter 常见的比较运算符: > < >= <= = != 常见的比较器 : BinaryComparator : 进行完整匹配某一个具体的值 BinaryPrefixComparator : 进行匹配前缀的 SubstringComparator : 进行模糊匹配的 NullComparator : 匹配空值 比较器表达式 : BinaryComparator表达式写法: binary:值 BinaryPrefixComparator表达式写法: binaryprefix:值 SubstringComparator 表达式写法: substring:值 NullComparator表达式写法: null 需求一: 使用 RowFilter 查询指定订单ID的数据 只查询订单的ID为:02602f66-adc7-40d4-8485-76b5632b5b53 、订单状态以及支付方式 scan 'ORDER_INFO', { FILTER => "RowFilter(=, 'binary:02602f66-adc7-40d4-8485-76b5632b5b53')" ,COLUMNS => ['C1:STATUS', 'C1:PAYWAY'],FORMATTER => 'toString' } 需求二: 查询状态为已付款的订单 scan 'ORDER_INFO', { FILTER => "ValueFilter(=, 'binary:已付款')" ,FORMATTER => 'toString' } 效果: 查询在表中 包含以付款的数据有那些, 结果也只展示对应查询数据的字段内容 scan 'ORDER_INFO', { FILTER => "SingleColumnValueFilter('C1','STATUS',=, 'binary:已付款')" ,FORMATTER => 'toString' } scan 'ORDER_INFO', { FILTER => "SingleColumnValueExcludeFilter('C1','STATUS',=, 'binary:已付款')" ,FORMATTER => 'toString' } 需求三:查询支付方式为1,且金额大于3000的订单 : 组合使用过滤器的方案 scan 'ORDER_INFO', {FILTER => "SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1') AND SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:3000')", FORMATTER => 'toString'}
incr的相关的操作:
语法:
incr ‘表名’,‘rowkey’,‘列蔟:列名’,累加值(默认累加1)
注意事项: 如果某一列要实现计数功能,必须要使用incr来创建对应的列 使用put创建的列是不能实现累加的 添加数据后, 如果查看使用incr 构建的字段的数据: get_counter '表名','rowkey','列族:列名' 具体操作: get_counter 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT' incr 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT'