赞
踩
目录
9.3、示例1:使用RowFilter查询指定学生id的信息
通过shell的方式来维护和管理HBase。例如:执行建表语句、执行增删改查操作等等。
需求:有以下学生数据,要将这样的一些数据保存到HBase中。
hbase shell
create '表名','列蔟名'...
-- 创建学生表,表名为student_info,该表有一个列蔟为C1
create 'student_info','C1';
注意:
list
1、禁用表
disable "表名"
2、删除表
drop "表名"
示例:删除student_info表
disable "student_info"
drop "student_info"
往学生表中添加以下数据。
学号 | 姓名 | 性别 | 年龄 | 入学时间 | 在校情况 |
0001 | 张三 | 男 | 25 | 2023-02-06 | 1 |
put '表名','ROWKEY','列蔟名:列名','值'
添加以上数据,需要执行以下操作:
put 'student_info','0001','C1:stuno','0001'
put 'student_info','0001','C1:name','张三'
put 'student_info','0001','C1:sex','男'
put 'student_info','0001','C1:age',25
put 'student_info','0001','C1:enrollment_time','2023-02-06'
put 'student_info','0001','C1:state',1
get '表名','rowkey'
示例:查询指定学生号的数据
get 'student_info','0001'
get 'student_info','0001', {FORMATTER => 'toString'}
注意:
示例:更新张三的年龄为20
put 'student_info', '0001', 'C1:age', 20
注意:
delete '表名', 'rowkey', '列蔟:列'
delete 'student_info','0001','C1:age'
deleteall '表名','rowkey'
示例:删除rowkey为0001的数据
deleteall 'student_info','0001'
truncate "表名"
示例:清空student_info的所有数据
truncate 'student_info'
cd /hbase/data
rz
hbase shell /hbase/data/student_info.txt
scan '表名'
注意:scan扫描非常耗时,要避免scan一张大表,生产环境中禁用。
scan 'student_info',{FORMATTER => 'toString'}
scan 'student_info', {LIMIT => 1, FORMATTER => 'toString'}
scan 'student_info', {COLUMNS => ['C1:name', 'C1:age'], FORMATTER => 'toString'}
scan '表名', {ROWPREFIXFILTER => 'rowkey'}
示例实现命令如下:
scan 'student_info', {ROWPREFIXFILTER => '0001', COLUMNS => ['C1:name', 'C1:age'], FORMATTER => 'toString'}
show_filters
rowkey 过滤器 | RowFilter | 实现行键字符串的比较和过滤 |
PrefixFilter | rowkey前缀过滤器 | |
KeyOnlyFilter | 只对单元格的键进行过滤和显示,不显示值 | |
FirstKeyOnlyFilter | 只扫描显示相同键的第一个单元格,其键值对会显示出来 | |
InclusiveStopFilter | 替代 ENDROW 返回终止条件行 | |
列过滤器 | FamilyFilter | 列簇过滤器 |
QualifierFilter | 列标识过滤器,只显示对应列名的数据 | |
ColumnPrefixFilter | 对列名称的前缀进行过滤 | |
MultipleColumnPrefixFilter | 可以指定多个前缀对列名称过滤 | |
ColumnRangeFilter | 过滤列名称的范围 | |
值过滤器 | ValueFilter | 值过滤器,找到符合值条件的键值对 |
SingleColumnValueFilter | 在指定的列蔟和列中进行比较的值过滤器 | |
SingleColumnValueExcludeFilter | 排除匹配成功的值 | |
其他过滤器 | ColumnPaginationFilter | 对一行的所有列分页,只返回 [offset,offset+limit] 范围内的列 |
PageFilter | 对显示结果按行进行分页显示 | |
TimestampsFilter | 时间戳过滤,支持等值,可以设置多个时间戳 | |
ColumnCountGetFilter | 限制每个逻辑行返回键值对的个数,在 get 方法中使用 | |
DependentColumnFilter | 允许用户指定一个参考列或引用列来过滤其他列的过滤器 |
Java API官方地址:Apache HBase 4.0.0-alpha-1-SNAPSHOT API
scan '表名', { Filter => "过滤器(比较运算符, '比较器表达式')” }
比较运算符 | 描述 |
= | 等于 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
!= | 不等于 |
比较器
比较器 | 描述 |
BinaryComparator | 匹配完整字节数组 |
BinaryPrefixComparator | 匹配字节数组前缀 |
BitComparator | 匹配比特位 |
NullComparator | 匹配空值 |
RegexStringComparator | 匹配正则表达式 |
SubstringComparator | 匹配子字符串 |
比较器 | 表达式语言缩写 |
BinaryComparator | binary:值 |
BinaryPrefixComparator | binaryprefix:值 |
BitComparator | bit:值 |
NullComparator | null |
RegexStringComparator | regexstring:正则表达式 |
SubstringComparator | substring:值 |
分析:
实现命令如下:
scan 'student_info', {FILTER => "RowFilter(=,'binary:0001')"}
SingleColumnValueFilter('C1', 'state', = , 'binary:1')
2、查询年龄大于21的学生信息
SingleColumnValueFilter('C1', 'age', > , 'binary:21')
SingleColumnValueFilter('C1', 'age', > , 'binary:21',true, true)
scan 'student_info', {FILTER => "SingleColumnValueFilter('C1', 'state', = , 'binary:1') AND SingleColumnValueFilter('C1', 'age', > , 'binary:21')", FORMATTER => 'toString'}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。