HBase:在字段不存在的情况下返回的记录
HBase: Records returned where field is not present
我在 HBase 中有一个人 table 如下 -
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 字段为假的记录。此属性将仅出现在某些行中。我尝试使用 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
预期输出应该只有一行与给定条件匹配,但它 returns 两行 is_error 字段不存在。
您的过滤器需要使用 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)"}
我在 HBase 中有一个人 table 如下 -
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 字段为假的记录。此属性将仅出现在某些行中。我尝试使用 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
预期输出应该只有一行与给定条件匹配,但它 returns 两行 is_error 字段不存在。
您的过滤器需要使用 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)"}