HBase: Records returned where field is not present

自古美人都是妖i 提交于 2020-01-13 20:20:51

问题


I have a person table in HBase like below -

ROW_KEY     COLUMN+CELL
dinesh      column='details:code',value=dr-01
dinesh      column='status:is_error',value=false
dinesh      column='time:date_created',value=1553747864740
dinesh      column='time:last_updated',value=1553747864740
alex        column='details:code',value=al-01
alex        column='time:date_created',value=1553747786521
alex        column='time:last_updated',value=1553747786521

I want to fetch only the records where is_error field is false. This attribute will be present only in certain rows. I tried to fetch it using SingleColumnValueFilter but its giving me all the records.

Query:

scan 'person', {FILTER=>"SingleColumnValueFilter('status','is_error',=,'binary:false')"}    

Output:

ROW_KEY     COLUMN+CELL
dinesh      column='details:code',value=dr-01
dinesh      column='status:is_error',value=false
dinesh      column='time:date_created',value=1553747864740
dinesh      column='time:last_updated',value=1553747864740
alex        column='details:code',value=al-01
alex        column='time:date_created',value=1553747786521
alex        column='time:last_updated',value=1553747786521

The expected output should be only one row matching the given condition but it returns two rows where is_error field is not present.


回答1:


You need to use a different constructor for your filter:

protected SingleColumnValueFilter(byte[] family,
                                  byte[] qualifier,
                                  CompareOperator op,
                                  ByteArrayComparable comparator,
                                  boolean filterIfMissing,
                                  boolean latestVersionOnly)

filterIfMissing will ensure that rows not containing your column aren't returned. I have no idea why this isn't default behaviour.

Your scan should be:

scan 'person', {FILTER=>"SingleColumnValueFilter('status','is_error', =, 'binary:false', true, true)"}    


来源:https://stackoverflow.com/questions/55447903/hbase-records-returned-where-field-is-not-present

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!