hbase 查询通用shell命令
(>=意思为包含,=意思是等于)
1.
按family(列族)查找,取回所有符合条件的“family”:
scan ‘scores’, {FILTER => “FamilyFilter(<=,‘binary:grc’)”}
或者
scan ‘scores’, {FILTER => “FamilyFilter(<=,‘binary:grc’)”}
2.
类似于FamilyFilter,取回所有符合条件的“列:
scan ‘scores’, {FILTER => “QualifierFilter(=,‘binary:b’)”}
3.
类似于FamilyFilter,符合条件的row都返回:
scan ‘scores’, {FILTER => “RowFilter(<=,‘binary:zhangsan01’)”}
4.
PrefixFilter,取回rowkey以指定prefix开头的所有行:
scan ‘scores’, {FILTER => org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes(‘li’))}
或者
scan ‘scores’, {FILTER => “PrefixFilter(‘li’)”}
5.
由于其原生带有PrefixFilter这种对ROWKEY的前缀过滤查询,因此想着实现的后缀查询的过程中,发现这一方面相对来说还是空白。因此,只能采用一些策略来实现,主要还是采用正则表达式的方式:
scan ‘scores’, {FILTER => “RowFilter(=,‘regexstring:.*n01’)”}
6
scan ‘scores’, {FILTER => “ColumnPrefixFilter(‘ar’)”}
或者
scan ‘scores’, {FILTER => org.apache.hadoop.hbase.filter.ColumnPrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes(‘ar’))}
7.
MultipleColumnPrefixFilter
a,返回有此前缀的所有列,
b,在byte[][]中定义所有需要的列前缀,只要满足其中一条约束就会被返回(ColumnPrefixFilter的加强版)
scan ‘scores’, {FILTER => “MultipleColumnPrefixFilter(‘ar’,‘ma’)”}
ColumnCountGetFilter
a,无法再scan中使用,只能在Get中
b,若设为0,则无法返回数据,设为几就按服务器中存储位置取回几列
c,可用size()取到列数,观察效果
scan ‘scores’, {FILTER => “ColumnCountGetFilter(2)”}
ColumnPaginationFilter
a,limit 表示返回列数
b,offset 表示返回列的偏移量,如果为0,则全部取出,如果为1,则返回第二列及以后
scan ‘scores’,{FILTER=>org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(2,1)}
或者
scan ‘scores’,{FILTER=> “ColumnPaginationFilter(2,1)”}
ColumnRangeFilter
构造函数:
ColumnRangeFilter(byte[] minColumn, boolean minColumnInclusive, byte[] maxColumn, boolean maxColumnInclusive)
*可用于获得一个范围的列,例如,如果你的一行中有百万个列,但是你只希望查看列名为bbbb到dddd的范围
*该过滤器可以进行高效的列名内部扫描。(为何是高效呢???因为列名是已经按字典排序好的)HBase-0.9.2 版本引入该功能。
*一个列名是可以出现在多个列族中的,该过滤器将返回所有列族中匹配的列
scan ‘scores’,{FILTER=> “ColumnRangeFilter(‘a’,true,‘n’,true)”}
PageFilter:取回XX条数据
scan ‘scores’, {FILTER => “PageFilter(2)”}
12
TimestampsFilter
a,按时间戳搜索数据库
b,需设定List 存放所有需要检索的时间戳
scan ‘scores’, {FILTER => “TimestampsFilter(1498003561726,1498003601365)”}
13.Hbase根据rowkey批量删除数据
- echo "scan ‘ihr:sehr_tags’ " |hbase shell|awk –F > ./file.txt
- 创建一个sh文件,将1中的文件写到
cat ./file.txt|awk ‘{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲'|while read ro…{tablename}’,’${rowvalue}’" >> ./deleteRowFile.txt
done
然后执行sh文件,
#为避免线上执行失误 ,先检查deleteRowFile.txt中要删除的rowkey是否正确,所以以下两行命令请手动执行
#hbase shell ./deleteRowFile.txt
#rm ./deleteRowFile.txt