HBase:在不存在字段的情况下返回的记录

时间:2019-04-01 03:53:36

标签: hbase hbase-shell

我在HBase中有一个人员表,如下所示-

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

我只想获取is_error字段为false的记录。此属性仅在某些行中存在。我试图使用SingleColumnValueFilter来获取它,但是它给了我所有的记录。

查询:

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

输出:

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

预期输出应仅为符合给定条件的一行,但它返回不存在is_error字段的两行。

1 个答案:

答案 0 :(得分:1)

您需要使用a different constructor作为过滤器:

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

filterIfMissing将确保不返回不包含您的列的行。我不知道为什么这不是默认行为。

您的扫描应为:

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