hbase:返回字段不存在的记录

h22fl7wq  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(581)

我在hbase中有一个person表,如下所示-

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

我只想获取错误字段为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\u error字段不存在。

eyh26e7m

eyh26e7m1#

您需要为筛选器使用不同的构造函数:

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)"}

相关问题