HBase 数据查询
HBase数据查询
数据准备
创建表
创建Student表,两个列族Info和Score;
1 | create 'Student','Info','Score' |
插入数据
批量插入
| No | Info | Score | |||
| name | age | Hadoop | HBase | Spark | |
| 001 | qiaofeng | 30 | 93 | 85 | 70 |
| 002 | duanyu | 27 | 95 | 98 | 50 |
| 003 | wangyuyan | 18 | 95 | 97 | 92 |
1 | put 'Student','001','Info:name','qiaofeng' |
1 | [zhangsan@node1 ~]$ hbase shell data.sh |
简单查询
行
1 | scan 'Student',STARTROW=>'001',ENDROW=>'003' |
列
粒度:列族
1 | get 'Student','001',COLUMN=>'Info' |
粒度:列
1 | get 'Student','001',COLUMN=>'Info:name' |
行列组合
1 | scan 'Student',COLUMN=>'Info',STARTROW=>'001',ENDROW=>'003' |
过滤器查询
get和scan都可以使用过滤器(Filter)来设置查询条件。
基础知识
KV
key
value
family
column
Qualifier
Single
Inclusive
过滤器语法
scan/get '表名',{FILTER=> "过滤器 ( 比较运算符,'比较器')"}
过滤器
1 | show_filters |
比较器
| 比较器 | 描述 |
|---|---|
| BinaryComparator | 匹配完整字节数组 |
| BinaryPrefixComparator | 匹配字节数组前缀 |
| BitComparator | 匹配比特位 |
| NullComparator | 匹配空值 |
| RegexStringComparator | 匹配正则表达式 |
| SubstringComparator | 匹配子字符串 |
比较运算符
| 比较运算符 | 描述 |
|---|---|
| = | 等于 |
| > | 大于 |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
| != | 不等于 |
过滤器分类
行键过滤器
列族与列过滤器
值过滤器
其他过滤器
行键过滤器
RowFilter
1 | scan 'Student',{FILTER=>"RowFilter(=,'substring:0')"} #行键包含字符0 |
PrefixFilter
1 | scan 'Student',{FILTER=>"PrefixFilter('002')"} # 行键前缀为002 |
KeyOnlyFilter
1 | scan 'Student',{FILTER=>"KeyOnlyFilter()"} # 显示所有Key,不显示Value |
FirstKeyOnlyFilter
1 | scan 'Student',{FILTER=>"FirstKeyOnlyFilter()"} # 无参.仅返回每行第一KV的滤波器。 此过滤器可用于更有效地执行row计数操作。 |
InclusiveStopFilter
替代ENDROW返回终止条件行;显示[001,003)
1 | scan 'Student',{STARTROW=>'001',FILTER=>"InclusiveStopFilter('002')"} #包含指定的终止行 |
列族过滤器
列族包含字符Inf的列;
1 | scan 'Student',{FILTER=>"FamilyFilter(=,'substring:Inf')"} |
筛选Info列:
1 | scan 'Student',{FILTER=>"FamilyFilter(=,'binary:Score')"} |
列过滤器
列过滤器
1 | scan 'Student',{FILTER=>"QualifierFilter(=,'binary:name')"} #等值 |
列前缀过滤器
1 | scan 'Student',{FILTER=>"ColumnPrefixFilter('H')"} |
多列前缀过滤器
1 | scan 'Student',{FILTER=>"MultipleColumnPrefixFilter('nam','age')"} |
列区间过滤器
各列的字典序如下:
1 | sorted(['name','age','Hadoop','Spark','HBase']) |
1 | scan 'Student',{FILTER=>"ColumnRangeFilter('S',true,'n',false)"} |
ColumnCountGetFilter
限制每个逻辑行返回的单元格数
1 | scan 'Student',FILTER=>"ColumnCountGetFilter(2)" |
值过滤器
ValueFilter
1 | scan 'Student',{FILTER=>"ValueFilter(=,'binary:98')"} |
1 | scan 'Student',{FILTER=>"ValueFilter(=,'substring:9')"} |
SingleColumnValueFilter
注意:没有Hbase这列的逻辑行也会被匹配到。
1 | scan 'Student',{FILTER=>"SingleColumnValueFilter('Score','Hbase',=,'binary:85')"} |
1 | scan 'Student',{FILTER=>"SingleColumnValueFilter('Score','Hbase',=,'binary:85',True,True)"} |
时间戳过滤器
TimestampsFilter
只查询时间戳为1649129478746和1649129465737的键值对;
1 | scan 'Student',{FILTER=>"TimestampsFilter(1649129478746,1649129465737)"} |
其他过滤器
PageFilter
基于行的分页过滤器,设置返回行数。
1 | scan 'Student',FILTER=>"PageFilter(2)" |
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.