HBASE-2968 No standard family filter provided
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1023190 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a01b4c5576
commit
cd9a0cb473
|
@ -1003,6 +1003,7 @@ Release 0.21.0 - Unreleased
|
||||||
scanner on a nonexistant table
|
scanner on a nonexistant table
|
||||||
HBASE-3092 Replace deprecated "new HBaseConfiguration(...)" calls
|
HBASE-3092 Replace deprecated "new HBaseConfiguration(...)" calls
|
||||||
(Lars Francke)
|
(Lars Francke)
|
||||||
|
HBASE-2968 No standard family filter provided (Andrey Stepachev)
|
||||||
|
|
||||||
NEW FEATURES
|
NEW FEATURES
|
||||||
HBASE-1961 HBase EC2 scripts
|
HBASE-1961 HBase EC2 scripts
|
||||||
|
|
|
@ -554,6 +554,140 @@ public class TestFilter extends HBaseTestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testFamilyFilter() throws IOException {
|
||||||
|
|
||||||
|
// Match family, only half of columns returned.
|
||||||
|
long expectedRows = this.numRows;
|
||||||
|
long expectedKeys = this.colsPerRow / 2;
|
||||||
|
Filter f = new FamilyFilter(CompareOp.EQUAL,
|
||||||
|
new BinaryComparator(Bytes.toBytes("testFamilyOne")));
|
||||||
|
Scan s = new Scan();
|
||||||
|
s.setFilter(f);
|
||||||
|
verifyScanNoEarlyOut(s, expectedRows, expectedKeys);
|
||||||
|
|
||||||
|
// Match keys less than given family, should return nothing
|
||||||
|
expectedRows = 0;
|
||||||
|
expectedKeys = 0;
|
||||||
|
f = new FamilyFilter(CompareOp.LESS,
|
||||||
|
new BinaryComparator(Bytes.toBytes("testFamily")));
|
||||||
|
s = new Scan();
|
||||||
|
s.setFilter(f);
|
||||||
|
verifyScanNoEarlyOut(s, expectedRows, expectedKeys);
|
||||||
|
|
||||||
|
// Match keys less than or equal, should return half of columns
|
||||||
|
expectedRows = this.numRows;
|
||||||
|
expectedKeys = this.colsPerRow / 2;
|
||||||
|
f = new FamilyFilter(CompareOp.LESS_OR_EQUAL,
|
||||||
|
new BinaryComparator(Bytes.toBytes("testFamilyOne")));
|
||||||
|
s = new Scan();
|
||||||
|
s.setFilter(f);
|
||||||
|
verifyScanNoEarlyOut(s, expectedRows, expectedKeys);
|
||||||
|
|
||||||
|
// Match keys from second family
|
||||||
|
// look only in second group of rows
|
||||||
|
expectedRows = this.numRows / 2;
|
||||||
|
expectedKeys = this.colsPerRow / 2;
|
||||||
|
f = new FamilyFilter(CompareOp.NOT_EQUAL,
|
||||||
|
new BinaryComparator(Bytes.toBytes("testFamilyOne")));
|
||||||
|
s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));
|
||||||
|
s.setFilter(f);
|
||||||
|
verifyScanNoEarlyOut(s, expectedRows, expectedKeys);
|
||||||
|
|
||||||
|
// Match all columns
|
||||||
|
// look only in second group of rows
|
||||||
|
expectedRows = this.numRows / 2;
|
||||||
|
expectedKeys = this.colsPerRow;
|
||||||
|
f = new FamilyFilter(CompareOp.GREATER_OR_EQUAL,
|
||||||
|
new BinaryComparator(Bytes.toBytes("testFamilyOne")));
|
||||||
|
s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));
|
||||||
|
s.setFilter(f);
|
||||||
|
verifyScanNoEarlyOut(s, expectedRows, expectedKeys);
|
||||||
|
|
||||||
|
// Match all columns in second family
|
||||||
|
// look only in second group of rows
|
||||||
|
expectedRows = this.numRows / 2;
|
||||||
|
expectedKeys = this.colsPerRow / 2;
|
||||||
|
f = new FamilyFilter(CompareOp.GREATER,
|
||||||
|
new BinaryComparator(Bytes.toBytes("testFamilyOne")));
|
||||||
|
s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));
|
||||||
|
s.setFilter(f);
|
||||||
|
verifyScanNoEarlyOut(s, expectedRows, expectedKeys);
|
||||||
|
|
||||||
|
// Match keys not equal to given family
|
||||||
|
// Look across rows and fully validate the keys and ordering
|
||||||
|
f = new FamilyFilter(CompareOp.NOT_EQUAL,
|
||||||
|
new BinaryComparator(FAMILIES[1]));
|
||||||
|
s = new Scan();
|
||||||
|
s.setFilter(f);
|
||||||
|
|
||||||
|
KeyValue [] kvs = {
|
||||||
|
// testRowOne-0
|
||||||
|
new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),
|
||||||
|
new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[2], VALUES[0]),
|
||||||
|
new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),
|
||||||
|
// testRowOne-2
|
||||||
|
new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),
|
||||||
|
new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[2], VALUES[0]),
|
||||||
|
new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),
|
||||||
|
// testRowOne-3
|
||||||
|
new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),
|
||||||
|
new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[2], VALUES[0]),
|
||||||
|
new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),
|
||||||
|
// testRowTwo-0
|
||||||
|
new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),
|
||||||
|
new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),
|
||||||
|
new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),
|
||||||
|
// testRowTwo-2
|
||||||
|
new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),
|
||||||
|
new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),
|
||||||
|
new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),
|
||||||
|
// testRowTwo-3
|
||||||
|
new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),
|
||||||
|
new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),
|
||||||
|
new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),
|
||||||
|
};
|
||||||
|
verifyScanFull(s, kvs);
|
||||||
|
|
||||||
|
|
||||||
|
// Test across rows and groups with a regex
|
||||||
|
// Filter out "test*-2"
|
||||||
|
// Expect 4 keys per row across both groups
|
||||||
|
f = new FamilyFilter(CompareOp.NOT_EQUAL,
|
||||||
|
new RegexStringComparator("test.*One"));
|
||||||
|
s = new Scan();
|
||||||
|
s.setFilter(f);
|
||||||
|
|
||||||
|
kvs = new KeyValue [] {
|
||||||
|
// testRowOne-0
|
||||||
|
new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),
|
||||||
|
new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[2], VALUES[0]),
|
||||||
|
new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),
|
||||||
|
// testRowOne-2
|
||||||
|
new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),
|
||||||
|
new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[2], VALUES[0]),
|
||||||
|
new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),
|
||||||
|
// testRowOne-3
|
||||||
|
new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),
|
||||||
|
new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[2], VALUES[0]),
|
||||||
|
new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),
|
||||||
|
// testRowTwo-0
|
||||||
|
new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),
|
||||||
|
new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),
|
||||||
|
new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),
|
||||||
|
// testRowTwo-2
|
||||||
|
new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),
|
||||||
|
new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),
|
||||||
|
new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),
|
||||||
|
// testRowTwo-3
|
||||||
|
new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),
|
||||||
|
new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),
|
||||||
|
new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),
|
||||||
|
};
|
||||||
|
verifyScanFull(s, kvs);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testRowFilter() throws IOException {
|
public void testRowFilter() throws IOException {
|
||||||
|
|
||||||
// Match a single row, all keys
|
// Match a single row, all keys
|
||||||
|
|
Loading…
Reference in New Issue