You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hbase.apache.org by David Koch <og...@googlemail.com> on 2013/01/24 00:47:30 UTC
Modifying SingleColumnValueFilter to not include matched KV
Hello,
As part of some custom filter building I took the source
of SingleColumnValueFilter (HBase 0.92.1) [1] and wanted to tweak it to NOT
return the matched column - thus essentially make it
equivalent SingleColumnValueExcludeFilter. I thought it must be trivial but
for some reason I cannot get it to work. The filter always includes the
matched KV pair.
The only change I made is in the filterKeyValue(<KeyValue>) method by
editing the last statement (see below):
public ReturnCode filterKeyValue(KeyValue keyValue) {
if (this.matchedColumn) {
// We already found and matched the single column, all keys now pass
return ReturnCode.INCLUDE;
} else if (this.latestVersionOnly && this.foundColumn) {
// We found but did not match the single column, skip to next row
return ReturnCode.NEXT_ROW;
}
if (!keyValue.matchingColumn(this.columnFamily, this.columnQualifier)) {
return ReturnCode.INCLUDE;
}
foundColumn = true;
if (filterColumnValue(keyValue.getBuffer(),
keyValue.getValueOffset(), keyValue.getValueLength())) {
return this.latestVersionOnly? ReturnCode.NEXT_ROW:
ReturnCode.INCLUDE;
}
this.matchedColumn = true;
// Commented line below to NOT include matched column
// return ReturnCode.INCLUDE;
return ReturnCode.SKIP;
}
Is this expected behavior? What am I overlooking here? By the way - how can
I sensibly debug filters. I tried using the Log instance but the output
does not show up in the region server's output.
Thank you,
/David
[1]
http://grepcode.com/file_/repo1.maven.org/maven2/org.apache.hbase/hbase/0.92.1/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.java/?v=source
Re: Modifying SingleColumnValueFilter to not include matched KV
Posted by David Koch <og...@googlemail.com>.
Ha,
I think I found it: I had multiple versions of the KV - so the last
statement should read ReturnCode.NEXT_COL.
/David
On Thu, Jan 24, 2013 at 12:47 AM, David Koch <og...@googlemail.com> wrote:
> Hello,
>
> As part of some custom filter building I took the source
> of SingleColumnValueFilter (HBase 0.92.1) [1] and wanted to tweak it to NOT
> return the matched column - thus essentially make it
> equivalent SingleColumnValueExcludeFilter. I thought it must be trivial but
> for some reason I cannot get it to work. The filter always includes the
> matched KV pair.
>
> The only change I made is in the filterKeyValue(<KeyValue>) method by
> editing the last statement (see below):
>
> public ReturnCode filterKeyValue(KeyValue keyValue) {
> if (this.matchedColumn) {
> // We already found and matched the single column, all keys now pass
> return ReturnCode.INCLUDE;
> } else if (this.latestVersionOnly && this.foundColumn) {
> // We found but did not match the single column, skip to next row
> return ReturnCode.NEXT_ROW;
> }
> if (!keyValue.matchingColumn(this.columnFamily, this.columnQualifier))
> {
> return ReturnCode.INCLUDE;
> }
> foundColumn = true;
> if (filterColumnValue(keyValue.getBuffer(),
> keyValue.getValueOffset(), keyValue.getValueLength())) {
> return this.latestVersionOnly? ReturnCode.NEXT_ROW:
> ReturnCode.INCLUDE;
> }
> this.matchedColumn = true;
> // Commented line below to NOT include matched column
> // return ReturnCode.INCLUDE;
> return ReturnCode.SKIP;
> }
>
> Is this expected behavior? What am I overlooking here? By the way - how
> can I sensibly debug filters. I tried using the Log instance but the output
> does not show up in the region server's output.
>
> Thank you,
>
> /David
>
> [1]
> http://grepcode.com/file_/repo1.maven.org/maven2/org.apache.hbase/hbase/0.92.1/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.java/?v=source
>