hbase 查询通用shell命令

(>=意思为包含,=意思是等于)

1.

按family(列族)查找,取回所有符合条件的“family”:

scan ‘scores’, {FILTER => “FamilyFilter(<=,‘binary:grc’)”}
 或者
 scan ‘scores’, {FILTER => “FamilyFilter(<=,‘binary:grc’)”}

Java hbase 查询 hbase 查询条件_apache


2.

类似于FamilyFilter,取回所有符合条件的“列:

scan ‘scores’, {FILTER => “QualifierFilter(=,‘binary:b’)”}

Java hbase 查询 hbase 查询条件_hadoop_02


3.

类似于FamilyFilter,符合条件的row都返回:

scan ‘scores’, {FILTER => “RowFilter(<=,‘binary:zhangsan01’)”}

Java hbase 查询 hbase 查询条件_hadoop_03


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’)”}

Java hbase 查询 hbase 查询条件_Java hbase 查询_04


5.

由于其原生带有PrefixFilter这种对ROWKEY的前缀过滤查询,因此想着实现的后缀查询的过程中,发现这一方面相对来说还是空白。因此,只能采用一些策略来实现,主要还是采用正则表达式的方式:

scan ‘scores’, {FILTER => “RowFilter(=,‘regexstring:.*n01’)”}

Java hbase 查询 hbase 查询条件_hadoop_05


6

scan ‘scores’, {FILTER => “ColumnPrefixFilter(‘ar’)”}
 或者
 scan ‘scores’, {FILTER => org.apache.hadoop.hbase.filter.ColumnPrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes(‘ar’))}

Java hbase 查询 hbase 查询条件_hadoop_06


7.

MultipleColumnPrefixFilter

a,返回有此前缀的所有列,

b,在byte[][]中定义所有需要的列前缀,只要满足其中一条约束就会被返回(ColumnPrefixFilter的加强版)

scan ‘scores’, {FILTER => “MultipleColumnPrefixFilter(‘ar’,‘ma’)”}

Java hbase 查询 hbase 查询条件_apache_07

ColumnCountGetFilter

a,无法再scan中使用,只能在Get中

b,若设为0,则无法返回数据,设为几就按服务器中存储位置取回几列

c,可用size()取到列数,观察效果

scan ‘scores’, {FILTER => “ColumnCountGetFilter(2)”}

Java hbase 查询 hbase 查询条件_Java hbase 查询_08

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)”}

Java hbase 查询 hbase 查询条件_Java hbase 查询_09

ColumnRangeFilter

构造函数:

ColumnRangeFilter(byte[] minColumn, boolean minColumnInclusive, byte[] maxColumn, boolean maxColumnInclusive)

*可用于获得一个范围的列,例如,如果你的一行中有百万个列,但是你只希望查看列名为bbbb到dddd的范围

*该过滤器可以进行高效的列名内部扫描。(为何是高效呢???因为列名是已经按字典排序好的)HBase-0.9.2 版本引入该功能。

*一个列名是可以出现在多个列族中的,该过滤器将返回所有列族中匹配的列

scan ‘scores’,{FILTER=> “ColumnRangeFilter(‘a’,true,‘n’,true)”}

Java hbase 查询 hbase 查询条件_apache_10

PageFilter:取回XX条数据

scan ‘scores’, {FILTER => “PageFilter(2)”}

Java hbase 查询 hbase 查询条件_shell_11

12
TimestampsFilter
a,按时间戳搜索数据库
b,需设定List 存放所有需要检索的时间戳

scan ‘scores’, {FILTER => “TimestampsFilter(1498003561726,1498003601365)”}

Java hbase 查询 hbase 查询条件_hadoop_12

13.Hbase根据rowkey批量删除数据

  1. echo "scan ‘ihr:sehr_tags’ " |hbase shell|awk –F > ./file.txt
  2. 创建一个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

  1. 然后执行sh文件,

#为避免线上执行失误 ,先检查deleteRowFile.txt中要删除的rowkey是否正确,所以以下两行命令请手动执行
 #hbase shell ./deleteRowFile.txt
 #rm ./deleteRowFile.txt