您的位置:首页 > 产品设计 > UI/UE

hbase SingleColumnValueFilter用法

2014-01-09 16:47 411 查看
网上很多博客是这样使用的:

Filter filter = new SingleColumnValueFilter(
Bytes.toBytes("column1"), null, CompareOp.EQUAL,
Bytes.toBytes("aaa")); // 当列column1的值为aaa时进行查询
Scan s = new Scan();
s.setFilter(filter);
ResultScanner rs = table.getScanner(s);

但结果并不是所期望的,如果要正确使用还得必须在scan中添加上面的列。某些文章中说这是一个bug,于是出现了SingleColumnValueExcludeFilter。

下面是本人在0.90.5版本中尝试的组合用法,希望各位大牛指点下,SingleColumnValueFilter1或SingleColumnValueFilter3是各位想得到的效果。

        //SingleColumnValueFilter+所有列
public static void SingleColumnValueFilter1(String tableName) {

try {
HTablePool pool = new HTablePool(configuration, 1000);
HTable table = (HTable) pool.getTable(tableName);

List<Filter> filters = new ArrayList<Filter>();

SingleColumnValueFilter sfilter2 = new SingleColumnValueFilter(
Bytes.toBytes("column2"), null, CompareOp.EQUAL,
Bytes.toBytes("bbb"));
sfilter2.setFilterIfMissing(true);
Filter filter2 = sfilter2;
filters.add(filter2);

FilterList filterList1 = new FilterList(filters);

Scan scan = new Scan();
scan.setFilter(filterList1);
ResultScanner rs = table.getScanner(scan);
for (Result r : rs) {
System.out.println("SingleColumnValueFilter1 get rowkey:"+ new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("ScanKV: " + keyValue + ", Value: " + Bytes.toString(keyValue.getValue()));
}
}
rs.close();

} catch (Exception e) {
e.printStackTrace();
System.out.println();
}

}

//SingleColumnValueFilter+指定列
public static void SingleColumnValueFilter2(String tableName) {

try {
HTablePool pool = new HTablePool(configuration, 1000);
HTable table = (HTable) pool.getTable(tableName);

List<Filter> filters = new ArrayList<Filter>();

SingleColumnValueFilter sfilter2 = new SingleColumnValueFilter(
Bytes.toBytes("column2"), null, CompareOp.EQUAL,
Bytes.toBytes("bbb"));
//sfilter2.setFilterIfMissing(true);
Filter filter2 = sfilter2;
filters.add(filter2);

FilterList filterList1 = new FilterList(filters);

Scan scan = new Scan();
scan.addFamily(Bytes.toBytes("column2"));
scan.setFilter(filterList1);
ResultScanner rs = table.getScanner(scan);
for (Result r : rs) {
System.out.println("SingleColumnValueFilter2 get rowkey:"+ new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("ScanKV: " + keyValue + ", Value: " + Bytes.toString(keyValue.getValue()));
}
}
rs.close();

} catch (Exception e) {
e.printStackTrace();
System.out.println();
}

}

//SingleColumnValueFilter+所有列+and
public static void SingleColumnValueFilter3(String tableName) {

try {
HTablePool pool = new HTablePool(configuration, 1000);
HTable table = (HTable) pool.getTable(tableName);

List<Filter> filters = new ArrayList<Filter>();

SingleColumnValueFilter sfilter2 = new SingleColumnValueFilter(
Bytes.toBytes("column2"), null, CompareOp.EQUAL,
Bytes.toBytes("bbb"));
sfilter2.setFilterIfMissing(true);
Filter filter2 = sfilter2;
filters.add(filter2);

SingleColumnValueFilter sfilter3 = new SingleColumnValueFilter(
Bytes.toBytes("column3"), "a".getBytes(), CompareOp.EQUAL,
Bytes.toBytes("ccc"));
sfilter3.setFilterIfMissing(true);
Filter filter3 = sfilter3;
filters.add(filter3);

FilterList filterList1 = new FilterList(filters);

Scan scan = new Scan();
scan.setFilter(filterList1);
ResultScanner rs = table.getScanner(scan);
for (Result r : rs) {
System.out.println("SingleColumnValueFilter3 get rowkey:"+ new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("ScanKV: " + keyValue + ", Value: " + Bytes.toString(keyValue.getValue()));
}
}
rs.close();

} catch (Exception e) {
e.printStackTrace();
System.out.println();
}

}

//SingleColumnValueFilter+指定列+and
public static void SingleColumnValueFilter4(String tableName) {

try {
HTablePool pool = new HTablePool(configuration, 1000);
HTable table = (HTable) pool.getTable(tableName);

List<Filter> filters = new ArrayList<Filter>();

SingleColumnValueFilter sfilter2 = new SingleColumnValueFilter(
Bytes.toBytes("column2"), null, CompareOp.EQUAL,
Bytes.toBytes("bbb"));
//sfilter2.setFilterIfMissing(true);
Filter filter2 = sfilter2;
filters.add(filter2);

SingleColumnValueFilter sfilter3 = new SingleColumnValueFilter(
Bytes.toBytes("column3"), "a".getBytes(), CompareOp.EQUAL,
Bytes.toBytes("ccc"));
//sfilter3.setFilterIfMissing(true);
Filter filter3 = sfilter3;
filters.add(filter3);

FilterList filterList1 = new FilterList(filters);

Scan scan = new Scan();
scan.addFamily(Bytes.toBytes("column2"));
scan.addColumn(Bytes.toBytes("column3"), Bytes.toBytes("a"));
scan.setFilter(filterList1);
ResultScanner rs = table.getScanner(scan);
for (Result r : rs) {
System.out.println("SingleColumnValueFilter4 get rowkey:"+ new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("ScanKV: " + keyValue + ", Value: " + Bytes.toString(keyValue.getValue()));
}
}
rs.close();

} catch (Exception e) {
e.printStackTrace();
System.out.println();
}

}

//SingleColumnValueExcludeFilter,指定列的整行,然后在排除指定列
public static void SingleColumnValueExcludeFilter1(String tableName) {

try {
HTablePool pool = new HTablePool(configuration, 1000);
HTable table = (HTable) pool.getTable(tableName);

List<Filter> filters = new ArrayList<Filter>();

org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter sfilter2 = 
new org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter(
Bytes.toBytes("column2"), null, CompareOp.EQUAL,
Bytes.toBytes("bbb"));
sfilter2.setFilterIfMissing(true);
Filter filter2 = sfilter2;
filters.add(filter2);

org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter sfilter3 = 
new org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter(
Bytes.toBytes("column3"), "a".getBytes(), CompareOp.EQUAL,
Bytes.toBytes("ccc"));
sfilter3.setFilterIfMissing(true);
Filter filter3 = sfilter3;
filters.add(filter3);

FilterList filterList1 = new FilterList(filters);

Scan scan = new Scan();
//scan.addFamily(Bytes.toBytes("column2"));
//scan.addColumn(Bytes.toBytes("column3"), Bytes.toBytes("a"));
scan.setFilter(filterList1);
ResultScanner rs = table.getScanner(scan);
for (Result r : rs) {
System.out.println("SingleColumnValueExcludeFilter1 get rowkey:"+ new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("ScanKV: " + keyValue + ", Value: " + Bytes.toString(keyValue.getValue()));
}
}
rs.close();

} catch (Exception e) {
e.printStackTrace();
System.out.println();
}

}

//SingleColumnValueExcludeFilter,指定列的整行,然后在排除指定列,然而scan中又添加指定列,故无结果
public static void SingleColumnValueExcludeFilter2(String tableName) {

try {
HTablePool pool = new HTablePool(configuration, 1000);
HTable table = (HTable) pool.getTable(tableName);

List<Filter> filters = new ArrayList<Filter>();

org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter sfilter2 = 
new org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter(
Bytes.toBytes("column2"), null, CompareOp.EQUAL,
Bytes.toBytes("bbb"));
//sfilter2.setFilterIfMissing(true);
Filter filter2 = sfilter2;
filters.add(filter2);

org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter sfilter3 = 
new org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter(
Bytes.toBytes("column3"), "a".getBytes(), CompareOp.EQUAL,
Bytes.toBytes("ccc"));
//sfilter3.setFilterIfMissing(true);
Filter filter3 = sfilter3;
filters.add(filter3);

FilterList filterList1 = new FilterList(filters);

Scan scan = new Scan();
scan.addFamily(Bytes.toBytes("column2"));
scan.addColumn(Bytes.toBytes("column3"), Bytes.toBytes("a"));
scan.setFilter(filterList1);
ResultScanner rs = table.getScanner(scan);
for (Result r : rs) {
System.out.println("SingleColumnValueExcludeFilter2 get rowkey:"+ new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("ScanKV: " + keyValue + ", Value: " + Bytes.toString(keyValue.getValue()));
}
}
rs.close();

} catch (Exception e) {
e.printStackTrace();
System.out.println();
}

}

//没有发现规律,不建议这样组合使用
public static void SingleColumnValueExcludeFilter3(String tableName) {

try {
HTablePool pool = new HTablePool(configuration, 1000);
HTable table = (HTable) pool.getTable(tableName);

List<Filter> filters = new ArrayList<Filter>();

org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter sfilter2 = 
new org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter(
Bytes.toBytes("column2"), null, CompareOp.EQUAL,
Bytes.toBytes("bbb"));
//sfilter2.setFilterIfMissing(true);
Filter filter2 = sfilter2;
filters.add(filter2);

org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter sfilter3 = 
new org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter(
Bytes.toBytes("column3"), "a".getBytes(), CompareOp.EQUAL,
Bytes.toBytes("ccc"));
//sfilter3.setFilterIfMissing(true);
Filter filter3 = sfilter3;
filters.add(filter3);

FilterList filterList1 = new FilterList(filters);

Scan scan = new Scan();
scan.setFilter(filterList1);
ResultScanner rs = table.getScanner(scan);
for (Result r : rs) {
System.out.println("SingleColumnValueExcludeFilter3 get rowkey:"+ new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("ScanKV: " + keyValue + ", Value: " + Bytes.toString(keyValue.getValue()));
}
}
rs.close();

} catch (Exception e) {
e.printStackTrace();
System.out.println();
}

}

结果:

全表扫描时 
get rowkey:112233bbbcccc
ScanKV: 112233bbbcccc/column1:/1387529922432/Put/vlen=3, Value: aaa
ScanKV: 112233bbbcccc/column2:/1387529922432/Put/vlen=3, Value: bbb
ScanKV: 112233bbbcccc/column3:a/1387529922432/Put/vlen=3, Value: ccc
ScanKV: 112233bbbcccc/column3:b/1387529922432/Put/vlen=3, Value: ddd
get rowkey:ROW1
ScanKV: ROW1/column3:a/1389079142948/Put/vlen=4, Value: VAL2
get rowkey:ROW2
ScanKV: ROW2/column3:a/1389079850815/Put/vlen=4, Value: VAL2
get rowkey:ROW3
ScanKV: ROW3/column3:b/1389165422945/Put/vlen=4, Value: VAL2
get rowkey:ROW4
ScanKV: ROW4/column3:a/1389166125855/Put/vlen=4, Value: VAL2
ScanKV: ROW4/column3:b/1389166125791/Put/vlen=4, Value: VAL2
ScanKV: ROW4/column3:c/1389166125918/Put/vlen=4, Value: VAL2
get rowkey:ROW5
ScanKV: ROW5/column3:b/1389166125992/Put/vlen=4, Value: VAL2
get rowkey:ROW6
ScanKV: ROW6/column1:/1389167680904/Put/vlen=3, Value: aaa
ScanKV: ROW6/column2:/1389167680904/Put/vlen=3, Value: bbb
ScanKV: ROW6/column3:a/1389167680904/Put/vlen=3, Value: ccc
ScanKV: ROW6/column3:b/1389167680904/Put/vlen=3, Value: ddd
get rowkey:ROW7
ScanKV: ROW7/column3:b/1389167680908/Put/vlen=3, Value: ddd
get rowkey:ROW8
ScanKV: ROW8/column2:/1389249660767/Put/vlen=3, Value: bbb
ScanKV: ROW8/column3:a/1389249680118/Put/vlen=3, Value: fff

SingleColumnValueFilter1 get rowkey:112233bbbcccc
ScanKV: 112233bbbcccc/column1:/1387529922432/Put/vlen=3, Value: aaa
ScanKV: 112233bbbcccc/column2:/1387529922432/Put/vlen=3, Value: bbb
ScanKV: 112233bbbcccc/column3:a/1387529922432/Put/vlen=3, Value: ccc
ScanKV: 112233bbbcccc/column3:b/1387529922432/Put/vlen=3, Value: ddd
SingleColumnValueFilter1 get rowkey:ROW6
ScanKV: ROW6/column1:/1389167680904/Put/vlen=3, Value: aaa
ScanKV: ROW6/column2:/1389167680904/Put/vlen=3, Value: bbb
ScanKV: ROW6/column3:a/1389167680904/Put/vlen=3, Value: ccc
ScanKV: ROW6/column3:b/1389167680904/Put/vlen=3, Value: ddd
SingleColumnValueFilter1 get rowkey:ROW8
ScanKV: ROW8/column2:/1389249660767/Put/vlen=3, Value: bbb
ScanKV: ROW8/column3:a/1389249680118/Put/vlen=3, Value: fff

SingleColumnValueFilter2 get rowkey:112233bbbcccc
ScanKV: 112233bbbcccc/column2:/1387529922432/Put/vlen=3, Value: bbb
SingleColumnValueFilter2 get rowkey:ROW6
ScanKV: ROW6/column2:/1389167680904/Put/vlen=3, Value: bbb
SingleColumnValueFilter2 get rowkey:ROW8
ScanKV: ROW8/column2:/1389249660767/Put/vlen=3, Value: bbb

SingleColumnValueFilter3 get rowkey:112233bbbcccc
ScanKV: 112233bbbcccc/column1:/1387529922432/Put/vlen=3, Value: aaa
ScanKV: 112233bbbcccc/column2:/1387529922432/Put/vlen=3, Value: bbb
ScanKV: 112233bbbcccc/column3:a/1387529922432/Put/vlen=3, Value: ccc
ScanKV: 112233bbbcccc/column3:b/1387529922432/Put/vlen=3, Value: ddd
SingleColumnValueFilter3 get rowkey:ROW6
ScanKV: ROW6/column1:/1389167680904/Put/vlen=3, Value: aaa
ScanKV: ROW6/column2:/1389167680904/Put/vlen=3, Value: bbb
ScanKV: ROW6/column3:a/1389167680904/Put/vlen=3, Value: ccc
ScanKV: ROW6/column3:b/1389167680904/Put/vlen=3, Value: ddd

SingleColumnValueFilter4 get rowkey:112233bbbcccc
ScanKV: 112233bbbcccc/column2:/1387529922432/Put/vlen=3, Value: bbb
ScanKV: 112233bbbcccc/column3:a/1387529922432/Put/vlen=3, Value: ccc
SingleColumnValueFilter4 get rowkey:ROW6
ScanKV: ROW6/column2:/1389167680904/Put/vlen=3, Value: bbb
ScanKV: ROW6/column3:a/1389167680904/Put/vlen=3, Value: ccc

SingleColumnValueExcludeFilter1 get rowkey:112233bbbcccc
ScanKV: 112233bbbcccc/column1:/1387529922432/Put/vlen=3, Value: aaa
ScanKV: 112233bbbcccc/column3:b/1387529922432/Put/vlen=3, Value: ddd
SingleColumnValueExcludeFilter1 get rowkey:ROW6
ScanKV: ROW6/column1:/1389167680904/Put/vlen=3, Value: aaa
ScanKV: ROW6/column3:b/1389167680904/Put/vlen=3, Value: ddd

SingleColumnValueExcludeFilter2 没有结果

SingleColumnValueExcludeFilter3 get rowkey:112233bbbcccc
ScanKV: 112233bbbcccc/column1:/1387529922432/Put/vlen=3, Value: aaa
ScanKV: 112233bbbcccc/column3:b/1387529922432/Put/vlen=3, Value: ddd
SingleColumnValueExcludeFilter3 get rowkey:ROW3
ScanKV: ROW3/column3:b/1389165422945/Put/vlen=4, Value: VAL2
SingleColumnValueExcludeFilter3 get rowkey:ROW5
ScanKV: ROW5/column3:b/1389166125992/Put/vlen=4, Value: VAL2
SingleColumnValueExcludeFilter3 get rowkey:ROW6
ScanKV: ROW6/column1:/1389167680904/Put/vlen=3, Value: aaa
ScanKV: ROW6/column3:b/1389167680904/Put/vlen=3, Value: ddd
SingleColumnValueExcludeFilter3 get rowkey:ROW7
ScanKV: ROW7/column3:b/1389167680908/Put/vlen=3, Value: ddd
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息