通过RowFilter过滤rowKey 比0003小的所有值
@Test
/*
* 使用RowFilter过滤器查询*/
public void rowFileter()throws IOException {
Scan scan = new Scan();
//查询所有rowkey比0003小的数据
/*
* 使用rowFileter查询比0003小的所有数据
* rowkey过滤器*/
RowFilter rowFilter = new RowFilter(CompareOperator.LESS, new BinaryComparator(Bytes.toBytes("0003")));
scan.setFilter(rowFilter);
//返回多条数据结果值都封装在resultScanner里面了
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner){
List<Cell> cells = result.listCells();
for (Cell cell : cells){
String rowkey = Bytes.toString(cell.getRowArray(),cell.getRowOffset(),cell.getRowLength());
//获取列族名
String familyName = Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength());
//获取列名
String columnName = Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(),cell.getQualifierLength());
if (familyName.equals("f1") && columnName.equals("id") || columnName.equals("age")) {
int value = Bytes.toInt(cell.getValueArray(),cell.getValueOffset(),cell.getValueLength());
System.out.println("数据的rowkey为" + rowkey + "列族名为" + familyName + "列名为" + columnName + "列的值为" + value);
}else {
String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
System.out.println("数据的rowkey为" + rowkey + "列族名为" + familyName + "列名为" + columnName + "列的值为" + value);
}
}
}
}
查询结果
在shell中通过
scan 'myuser', FILTER=>"RowFilter(<=,'binary:0003')"
得到
通过列族过滤器FamilyFilter查询比f2列族小的所有的列族内的数据
@Test
/*
* 使用FamilyFilter过滤器查询*/
public void filterStudy()throws IOException {
Scan scan = new Scan();
//查询比f2列族小的所有列族里的数据
FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.LESS, new SubstringComparator("f2"));
scan.setFilter(familyFilter);
//返回多条数据结果值都封装在resultScanner里面了
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner){
List<Cell> cells = result.listCells();
for (Cell cell : cells){
String rowkey = Bytes.toString(cell.getRowArray(),cell.getRowOffset(),cell.getRowLength());
//获取列族名
String familyName = Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength());
//获取列名
String columnName = Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(),cell.getQualifierLength());
if (familyName.equals("f1") && columnName.equals("id") || columnName.equals("age")) {
int value = Bytes.toInt(cell.getValueArray(),cell.getValueOffset(),cell.getValueLength());
System.out.println("数据的rowkey为" + rowkey + "列族名为" + familyName + "列名为" + columnName + "列的值为" + value);
}else {
String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
System.out.println("数据的rowkey为" + rowkey + "列族名为" + familyName + "列名为" + columnName + "列的值为" + value);
}
}
}
}
查询得到
substring不能使用小于等于等符号即在shell中查询f1
scan 'myuser', FILTER=>"FamilyFilter(=,'substring:f1')"
查询结果为
使用qualifierFilter过滤器查询name列的值
@Test
/*
* 使用qualifierFilter过滤器查询*/
public void qualifierFilter()throws IOException {
Scan scan = new Scan();
QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("name"));
scan.setFilter(qualifierFilter);
//返回多条数据结果值都封装在resultScanner里面了
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner){
List<Cell> cells = result.listCells();
for (Cell cell : cells){
String rowkey = Bytes.toString(cell.getRowArray(),cell.getRowOffset(),cell.getRowLength());
//获取列族名
String familyName = Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength());
//获取列名
String columnName = Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(),cell.getQualifierLength());
if (familyName.equals("f1") && columnName.equals("id") || columnName.equals("age")) {
int value = Bytes.toInt(cell.getValueArray(),cell.getValueOffset(),cell.getValueLength());
System.out.println("数据的rowkey为" + rowkey + "列族名为" + familyName + "列名为" + columnName + "列的值为" + value);
}else {
String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
System.out.println("数据的rowkey为" + rowkey + "列族名为" + familyName + "列名为" + columnName + "列的值为" + value);
}
}
}
}
得到
shell中通过
scan 'myuser',FILTER=>"QualifierFilter(=,'binary:name')"
查询得到
使用valueFilter过滤器查询所有列中value值中包含8的数据
@Test
/*
* 使用valueFilter过滤器查询*/
public void valueFilter()throws IOException {
Scan scan = new Scan();
//查询所有列中value值中包含8的数据
ValueFilter valueFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("8"));
scan.setFilter(valueFilter);
//返回多条数据结果值都封装在resultScanner里面了
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner){
List<Cell> cells = result.listCells();
for (Cell cell : cells){
String rowkey = Bytes.toString(cell.getRowArray(),cell.getRowOffset(),cell.getRowLength());
//获取列族名
String familyName = Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength());
//获取列名
String columnName = Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(),cell.getQualifierLength());
if (familyName.equals("f1") && columnName.equals("id") || columnName.equals("age")) {
int value = Bytes.toInt(cell.getValueArray(),cell.getValueOffset(),cell.getValueLength());
System.out.println("数据的rowkey为" + rowkey + "列族名为" + familyName + "列名为" + columnName + "列的值为" + value);
}else {
String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
System.out.println("数据的rowkey为" + rowkey + "列族名为" + familyName + "列名为" + columnName + "列的值为" + value);
}
}
}
}
查询得到
在shell中执行
scan 'myuser',FILTER=>"ValueFilter(=,'substring:8')"
得到
单列值过滤器SingleColumnValueFilter查询name值为刘备的所有数据
@Test
/*
* 使用singleColumnValueFilter过滤器查询*/
public void singleColumnValueFilter()throws IOException {
Scan scan = new Scan();
//查询name值为刘备的所有数据
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("f1".getBytes(), "name".getBytes(), CompareOperator.EQUAL, "刘备".getBytes());
scan.setFilter(singleColumnValueFilter);
//返回多条数据结果值都封装在resultScanner里面了
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner){
List<Cell> cells = result.listCells();
for (Cell cell : cells){
String rowkey = Bytes.toString(cell.getRowArray(),cell.getRowOffset(),cell.getRowLength());
//获取列族名
String familyName = Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength());
//获取列名
String columnName = Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(),cell.getQualifierLength());
if (familyName.equals("f1") && columnName.equals("id") || columnName.equals("age")) {
int value = Bytes.toInt(cell.getValueArray(),cell.getValueOffset(),cell.getValueLength());
System.out.println("数据的rowkey为" + rowkey + "列族名为" + familyName + "列名为" + columnName + "列的值为" + value);
}else {
String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
System.out.println("数据的rowkey为" + rowkey + "列族名为" + familyName + "列名为" + columnName + "列的值为" + value);
}
}
}
}
得到
在shell中,因为刘备不能识别,我们通过手机号17888888888查询
scan 'myuser',FILTER=>"SingleColumnValueFilter('f2','phone',=,'binary:17888888888')"
得到
列值排除过滤器SingleColumnValueExcludeFilter与SingleColumnValueFilter相反,会排除掉指定的列,其他的列全部返回,不再演示
rowkey前缀过滤器PrefixFilte查询以00开头的所有前缀的rowkey
@Test
/*
* 使用 prefixFilter过滤器查询*/
public void prefixFilter()throws IOException {
Scan scan = new Scan();
PrefixFilter prefixFilter = new PrefixFilter("00".getBytes());
scan.setFilter(prefixFilter);
//返回多条数据结果值都封装在resultScanner里面了
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner){
List<Cell> cells = result.listCells();
for (Cell cell : cells){
String rowkey = Bytes.toString(cell.getRowArray(),cell.getRowOffset(),cell.getRowLength());
//获取列族名
String familyName = Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength());
//获取列名
String columnName = Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(),cell.getQualifierLength());
if (familyName.equals("f1") && columnName.equals("id") || columnName.equals("age")) {
int value = Bytes.toInt(cell.getValueArray(),cell.getValueOffset(),cell.getValueLength());
System.out.println("数据的rowkey为" + rowkey + "列族名为" + familyName + "列名为" + columnName + "列的值为" + value);
}else {
String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
System.out.println("数据的rowkey为" + rowkey + "列族名为" + familyName + "列名为" + columnName + "列的值为" + value);
}
}
}
}
得到
在shell中
scan 'myuser',FILTER=>"PrefixFilter('00')"
得到