Java 如何使用SingleColumnValueFilter按ColumnPrefixFilter扫描并获取所有列?
我们有hbase表,我需要扫描一下。我必须找到所有行,其中一个特定列具有精确的值,另一个列具有精确的前缀。 比如:Java 如何使用SingleColumnValueFilter按ColumnPrefixFilter扫描并获取所有列?,java,hbase,database-scan,Java,Hbase,Database Scan,我们有hbase表,我需要扫描一下。我必须找到所有行,其中一个特定列具有精确的值,另一个列具有精确的前缀。 比如: SingleColumnValueFilter filterA = new SingleColumnValueFilter(COLUMN_FAMILY, COLUMN_1, CompareFilter.CompareOp.EQUAL, Bytes.toBytes(2L)); Filter filterB = new ColumnPrefixFilte
SingleColumnValueFilter filterA =
new SingleColumnValueFilter(COLUMN_FAMILY, COLUMN_1, CompareFilter.CompareOp.EQUAL, Bytes.toBytes(2L));
Filter filterB = new ColumnPrefixFilter(COLUMN_2_PREFIX);
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
filterList.addFilter(filterA);
filterList.addFilter(filterB);
Scan scan = new Scan();
scan.setFilter(filterList);
单个过滤器工作完美filterA
返回COLUMN_1
值为2L
的行filterB
返回存在列2
的行。但他们在一起什么也没有回报。
那么我可以将这些过滤器组合在一起吗?还是我做错了
具有相同条件的第二个问题:我是否可以使用
ColumnPrefixFilter
并获取所有列。我的意思是找到COLUMN_2
存在的行,并获取所有其他列?我找到了部分决策。我可以使用限定符过滤器
而不是列前缀过滤器
。它的工作原理是:
Filter filterB = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new BinaryPrefixComparator(COLUMN_2_PREFIX));
我得到的行只有一列
列2
。但是我仍然非常需要得到所有列,而不是我筛选的唯一列。这可能是一个愚蠢的问题,但是您是否验证了您确实有同时满足这两个条件的行?(除非您需要OR操作,然后您应该将运算符更改为“必须通过”)当然可以。有两个条件都满足的行。我怀疑columnProfixFilter
不想与过滤器中的其他列一起工作。因为,如果更改filterA
以将值过滤到列_2
列中,则代码工作正常。