[ 
https://issues.apache.org/jira/browse/HADOOP-1531?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12508648
 ] 

James Kennedy commented on HADOOP-1531:
---------------------------------------

in relation to Hadoop-1439, i'll add a comment there.

I think i needed that RowFilter() constructor to make RPC serialization happy.  
Needs to instantiate the filter before it calls readFields().

The regexp is passed to the constructor since its a single param whereas the 
column criteria is many. I suppose i could add a constructor that takes a list 
of col criteria.

filter subpackage is a good idea... in fact it wouldn't hurt to refactor whats 
there into some other sub-packages.

is the filter == null code necessary? I thought I saw RPC code that was 
handling nulls. Indeed in my testing i seem to be able to pass null filters 
through rpc just fine. I'll dbl check that though.

and I'll fix the other stuff you guys mentioned.



> Add RowFilter to HRegion.HScanner
> ---------------------------------
>
>                 Key: HADOOP-1531
>                 URL: https://issues.apache.org/jira/browse/HADOOP-1531
>             Project: Hadoop
>          Issue Type: Improvement
>          Components: contrib/hbase
>    Affects Versions: 0.14.0
>            Reporter: James Kennedy
>            Assignee: James Kennedy
>         Attachments: RowFilter.patch
>
>
> I've implemented a RowFilterInterface and a RowFilter implementation.  This 
> is passed to the HRegion.HScanner via HClient.openScanner() though it is an 
> entirely optional parameter.
> HScanner applies the filter in the next() call by iterating until it 
> encounters a row that is not filtered by the RowFilter.  The filter applies 
> criteria based on row keys and/or column data values.
> Null values are little tricky since the resultSet in that loop may represent 
> nulls as absent columns or as DELETED_BYTES.  Nevertheless null cases are 
> taken care of by the filter and you can for example retrieve all rows where 
> column X = null.
> The initial RowFilter implementation is limited in several ways:
> * Equality test only with literal values. No !=, <, >, etc. No col1 == col2. 
> This is a straight-up byte[] comparison.
> * Multiple column criteria are treated as an implicit conjunction, no 
> disjunction possible.
> * row key criteria is a regular expression only
> * row key criteria is independent of column criteria. No "if 
> rowkey.matches(A)  and col1==B"  although the interface is created to allow 
> for that.
> But it should be easy to write an improved RowFilterInterface implementation 
> to take care of most of the above without having to change code elsewhere.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to