Skip to content

Commit da500ea

Browse files
miyuan-ljrstuBirdFly
authored andcommitted
hbase 1.x compatibility: filter relevant (#51)
* filter * add scan tests
1 parent 51fe695 commit da500ea

File tree

3 files changed

+371
-48
lines changed

3 files changed

+371
-48
lines changed

src/main/java/com/alipay/oceanbase/hbase/filter/HBaseFilterUtils.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public static String toParseableString(Filter filter) {
4444
return toParseableString((FilterList) filter);
4545
} else if (filter instanceof ColumnPaginationFilter) {
4646
return toParseableString((ColumnPaginationFilter) filter);
47+
} else if (filter instanceof ColumnPrefixFilter) {
48+
return toParseableString((ColumnPrefixFilter) filter);
4749
} else if (filter instanceof SkipFilter) {
4850
return toParseableString((SkipFilter) filter);
4951
} else if (filter instanceof WhileMatchFilter) {
@@ -117,8 +119,17 @@ private static String toParseableString(PageFilter filter) {
117119
}
118120

119121
private static String toParseableString(ColumnPaginationFilter filter) {
120-
return filter.getClass().getSimpleName() + '(' + filter.getLimit() + ','
121-
+ filter.getOffset() + ')';
122+
if (filter.getColumnOffset() != null) {
123+
return filter.getClass().getSimpleName() + '(' + filter.getLimit() + ",'"
124+
+ Bytes.toString(filter.getColumnOffset()) + "')";
125+
} else {
126+
return filter.getClass().getSimpleName() + '(' + filter.getLimit() + ','
127+
+ filter.getOffset() + ')';
128+
}
129+
}
130+
131+
private static String toParseableString(ColumnPrefixFilter filter) {
132+
return filter.getClass().getSimpleName() + "('" + Bytes.toString(filter.getPrefix()) + "')";
122133
}
123134

124135
private static String toParseableString(ColumnCountGetFilter filter) {

src/test/java/com/alipay/oceanbase/hbase/HTableTestBase.java

Lines changed: 303 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import java.util.Base64;
4141
import java.util.List;
4242

43+
import static org.apache.hadoop.hbase.filter.FilterList.Operator.MUST_PASS_ALL;
4344
import static org.apache.hadoop.hbase.filter.FilterList.Operator.MUST_PASS_ONE;
4445
import static org.apache.hadoop.hbase.util.Bytes.toBytes;
4546
import static org.junit.Assert.assertEquals;
@@ -453,6 +454,308 @@ public void tryPut(Table hTable, Put put) throws Exception {
453454
Thread.sleep(1);
454455
}
455456

457+
@Test
458+
public void testFilter() throws Exception {
459+
String key1 = "getKey1";
460+
String key2 = "getKey2";
461+
String column1 = "abc";
462+
String column2 = "def";
463+
String value1 = "value1";
464+
String value2 = "value2";
465+
String value3 = "value3";
466+
String family = "family1";
467+
Delete deleteKey1Family = new Delete(toBytes(key1));
468+
deleteKey1Family.deleteFamily(toBytes(family));
469+
470+
Delete deleteKey2Family = new Delete(toBytes(key2));
471+
deleteKey2Family.deleteFamily(toBytes(family));
472+
473+
hTable.delete(deleteKey1Family);
474+
hTable.delete(deleteKey2Family);
475+
476+
Put putKey1Column1Value1 = new Put(toBytes(key1));
477+
putKey1Column1Value1.add(toBytes(family), toBytes(column1), toBytes(value1));
478+
479+
Put putKey1Column1Value2 = new Put(toBytes(key1));
480+
putKey1Column1Value2.add(toBytes(family), toBytes(column1), toBytes(value2));
481+
482+
Put putKey1Column2Value2 = new Put(toBytes(key1));
483+
putKey1Column2Value2.add(toBytes(family), toBytes(column2), toBytes(value2));
484+
485+
Put putKey1Column2Value1 = new Put(toBytes(key1));
486+
putKey1Column2Value1.add(toBytes(family), toBytes(column2), toBytes(value1));
487+
488+
Put putKey2Column1Value1 = new Put(toBytes(key2));
489+
putKey2Column1Value1.add(toBytes(family), toBytes(column1), toBytes(value1));
490+
491+
Put putKey2Column1Value2 = new Put(toBytes(key2));
492+
putKey2Column1Value2.add(toBytes(family), toBytes(column1), toBytes(value2));
493+
494+
Put putKey2Column2Value2 = new Put(toBytes(key2));
495+
putKey2Column2Value2.add(toBytes(family), toBytes(column2), toBytes(value2));
496+
497+
Put putKey2Column2Value1 = new Put(toBytes(key2));
498+
putKey2Column2Value1.add(toBytes(family), toBytes(column2), toBytes(value1));
499+
500+
Get get;
501+
Result r;
502+
503+
hTable.delete(deleteKey1Family);
504+
hTable.delete(deleteKey2Family);
505+
tryPut(hTable, putKey1Column1Value1);
506+
tryPut(hTable, putKey1Column1Value2);
507+
tryPut(hTable, putKey1Column1Value1);
508+
tryPut(hTable, putKey1Column2Value1);
509+
tryPut(hTable, putKey1Column2Value2);
510+
tryPut(hTable, putKey1Column2Value1);
511+
tryPut(hTable, putKey1Column2Value2);
512+
tryPut(hTable, putKey2Column2Value1);
513+
tryPut(hTable, putKey2Column2Value2);
514+
515+
ColumnPrefixFilter filter = new ColumnPrefixFilter(Bytes.toBytes("a"));
516+
get = new Get(toBytes(key1));
517+
get.setMaxVersions(10);
518+
get.addFamily(toBytes(family));
519+
get.setFilter(filter);
520+
r = hTable.get(get);
521+
Assert.assertEquals(3, r.raw().length);
522+
523+
filter = new ColumnPrefixFilter(Bytes.toBytes("d"));
524+
get = new Get(toBytes(key1));
525+
get.setMaxVersions(10);
526+
get.addFamily(toBytes(family));
527+
get.setFilter(filter);
528+
r = hTable.get(get);
529+
Assert.assertEquals(4, r.raw().length);
530+
531+
filter = new ColumnPrefixFilter(Bytes.toBytes("b"));
532+
get = new Get(toBytes(key1));
533+
get.setMaxVersions(10);
534+
get.addFamily(toBytes(family));
535+
get.setFilter(filter);
536+
r = hTable.get(get);
537+
Assert.assertEquals(0, r.raw().length);
538+
539+
filter = new ColumnPrefixFilter(Bytes.toBytes("e"));
540+
get = new Get(toBytes(key1));
541+
get.setMaxVersions(10);
542+
get.addFamily(toBytes(family));
543+
get.setFilter(filter);
544+
r = hTable.get(get);
545+
Assert.assertEquals(0, r.raw().length);
546+
547+
FilterList filterList = new FilterList(MUST_PASS_ONE);
548+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("a")));
549+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("d")));
550+
get = new Get(toBytes(key1));
551+
get.setMaxVersions(10);
552+
get.addFamily(toBytes(family));
553+
get.setFilter(filterList);
554+
r = hTable.get(get);
555+
Assert.assertEquals(7, r.raw().length);
556+
557+
filterList = new FilterList(MUST_PASS_ALL);
558+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("a")));
559+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("d")));
560+
get = new Get(toBytes(key1));
561+
get.setMaxVersions(10);
562+
get.addFamily(toBytes(family));
563+
get.setFilter(filterList);
564+
r = hTable.get(get);
565+
Assert.assertEquals(0, r.raw().length);
566+
567+
filterList = new FilterList(MUST_PASS_ONE);
568+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("c")));
569+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("d")));
570+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("e")));
571+
get = new Get(toBytes(key1));
572+
get.setMaxVersions(10);
573+
get.addFamily(toBytes(family));
574+
get.setFilter(filterList);
575+
r = hTable.get(get);
576+
Assert.assertEquals(4, r.raw().length);
577+
578+
filterList = new FilterList(MUST_PASS_ALL);
579+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("d")));
580+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("de")));
581+
get = new Get(toBytes(key1));
582+
get.setMaxVersions(10);
583+
get.addFamily(toBytes(family));
584+
get.setFilter(filterList);
585+
r = hTable.get(get);
586+
Assert.assertEquals(4, r.raw().length);
587+
588+
ColumnPaginationFilter f = new ColumnPaginationFilter(8, 0);
589+
get = new Get(toBytes(key1));
590+
get.setMaxVersions(10);
591+
get.addFamily(toBytes(family));
592+
get.setFilter(f);
593+
r = hTable.get(get);
594+
Assert.assertEquals(2, r.raw().length);
595+
596+
Put putKey1Column3Value1 = new Put(toBytes(key1));
597+
putKey1Column3Value1.add(toBytes(family), toBytes("ggg"), toBytes(value1));
598+
tryPut(hTable, putKey1Column3Value1);
599+
600+
f = new ColumnPaginationFilter(8, 0);
601+
get = new Get(toBytes(key1));
602+
get.setMaxVersions(10);
603+
get.addFamily(toBytes(family));
604+
get.setFilter(f);
605+
r = hTable.get(get);
606+
Assert.assertEquals(3, r.raw().length);
607+
608+
f = new ColumnPaginationFilter(8, Bytes.toBytes("abc"));
609+
get = new Get(toBytes(key1));
610+
get.setMaxVersions(10);
611+
get.addFamily(toBytes(family));
612+
get.setFilter(f);
613+
r = hTable.get(get);
614+
Assert.assertEquals(3, r.raw().length);
615+
616+
f = new ColumnPaginationFilter(8, Bytes.toBytes("bc"));
617+
get = new Get(toBytes(key1));
618+
get.setMaxVersions(10);
619+
get.addFamily(toBytes(family));
620+
get.setFilter(f);
621+
r = hTable.get(get);
622+
Assert.assertEquals(2, r.raw().length);
623+
624+
f = new ColumnPaginationFilter(8, Bytes.toBytes("ef"));
625+
get = new Get(toBytes(key1));
626+
get.setMaxVersions(10);
627+
get.addFamily(toBytes(family));
628+
get.setFilter(f);
629+
r = hTable.get(get);
630+
Assert.assertEquals(1, r.raw().length);
631+
632+
f = new ColumnPaginationFilter(8, Bytes.toBytes("h"));
633+
get = new Get(toBytes(key1));
634+
get.setMaxVersions(10);
635+
get.addFamily(toBytes(family));
636+
get.setFilter(f);
637+
r = hTable.get(get);
638+
Assert.assertEquals(0, r.raw().length);
639+
640+
Scan scan;
641+
scan = new Scan();
642+
scan.addFamily(family.getBytes());
643+
scan.setStartRow("getKey1".getBytes());
644+
scan.setStopRow("getKey3".getBytes());
645+
scan.setMaxVersions(10);
646+
ResultScanner scanner = hTable.getScanner(scan);
647+
648+
int res_count = 0;
649+
for (Result result : scanner) {
650+
for (KeyValue keyValue : result.raw()) {
651+
if (res_count < 8) {
652+
Assert.assertArrayEquals(key1.getBytes(), keyValue.getRow());
653+
} else {
654+
Assert.assertArrayEquals(key2.getBytes(), keyValue.getRow());
655+
}
656+
res_count += 1;
657+
}
658+
}
659+
Assert.assertEquals(res_count, 10);
660+
scanner.close();
661+
662+
scan = new Scan();
663+
scan.addFamily(family.getBytes());
664+
scan.setStartRow("getKey1".getBytes());
665+
scan.setStopRow("getKey3".getBytes());
666+
scan.setMaxVersions(10);
667+
filter = new ColumnPrefixFilter(Bytes.toBytes("d"));
668+
scan.setFilter(filter);
669+
scanner = hTable.getScanner(scan);
670+
671+
res_count = 0;
672+
for (Result result : scanner) {
673+
for (KeyValue keyValue : result.raw()) {
674+
if (res_count < 4) {
675+
Assert.assertArrayEquals(key1.getBytes(), keyValue.getRow());
676+
} else {
677+
Assert.assertArrayEquals(key2.getBytes(), keyValue.getRow());
678+
}
679+
res_count += 1;
680+
}
681+
}
682+
Assert.assertEquals(res_count, 6);
683+
scanner.close();
684+
685+
scan = new Scan();
686+
scan.addFamily(family.getBytes());
687+
scan.setStartRow("getKey1".getBytes());
688+
scan.setStopRow("getKey3".getBytes());
689+
scan.setMaxVersions(10);
690+
filterList = new FilterList(MUST_PASS_ONE);
691+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("c")));
692+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("d")));
693+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("e")));
694+
filterList.addFilter(new ColumnPrefixFilter(Bytes.toBytes("g")));
695+
scan.setFilter(filterList);
696+
scanner = hTable.getScanner(scan);
697+
698+
res_count = 0;
699+
for (Result result : scanner) {
700+
for (KeyValue keyValue : result.raw()) {
701+
if (res_count < 5) {
702+
Assert.assertArrayEquals(key1.getBytes(), keyValue.getRow());
703+
} else {
704+
Assert.assertArrayEquals(key2.getBytes(), keyValue.getRow());
705+
}
706+
res_count += 1;
707+
}
708+
}
709+
Assert.assertEquals(res_count, 7);
710+
scanner.close();
711+
712+
scan = new Scan();
713+
scan.addFamily(family.getBytes());
714+
scan.setStartRow("getKey1".getBytes());
715+
scan.setStopRow("getKey3".getBytes());
716+
scan.setMaxVersions(10);
717+
f = new ColumnPaginationFilter(2, Bytes.toBytes("d"));
718+
scan.setFilter(f);
719+
scanner = hTable.getScanner(scan);
720+
721+
res_count = 0;
722+
for (Result result : scanner) {
723+
for (KeyValue keyValue : result.raw()) {
724+
if (res_count < 2) {
725+
Assert.assertArrayEquals(key1.getBytes(), keyValue.getRow());
726+
} else {
727+
Assert.assertArrayEquals(key2.getBytes(), keyValue.getRow());
728+
}
729+
res_count += 1;
730+
}
731+
}
732+
Assert.assertEquals(res_count, 3);
733+
scanner.close();
734+
735+
scan = new Scan();
736+
scan.addFamily(family.getBytes());
737+
scan.setStartRow("getKey1".getBytes());
738+
scan.setStopRow("getKey3".getBytes());
739+
scan.setMaxVersions(10);
740+
f = new ColumnPaginationFilter(2, Bytes.toBytes("g"));
741+
scan.setFilter(f);
742+
scanner = hTable.getScanner(scan);
743+
744+
res_count = 0;
745+
for (Result result : scanner) {
746+
for (KeyValue keyValue : result.raw()) {
747+
if (res_count < 1) {
748+
Assert.assertArrayEquals(key1.getBytes(), keyValue.getRow());
749+
} else {
750+
Assert.assertArrayEquals(key2.getBytes(), keyValue.getRow());
751+
}
752+
res_count += 1;
753+
}
754+
}
755+
Assert.assertEquals(res_count, 1);
756+
scanner.close();
757+
}
758+
456759
@Test
457760
public void testGetFilter() throws Exception {
458761
String key1 = "getKey1";

0 commit comments

Comments
 (0)