扫描 hbase table 以查找列字段值为空的行

scan hbase table for row where column field value is empty

我想在 hbase shell 中执行快速过滤扫描,以检索特定列值为 null 或空的任何记录。有人告诉我我也可以在 PIG 中执行此操作,但我也不知道该怎么做。有人可以协助使用任何一种方法来解决这个问题。我将作为最后一个选项在 java 中做,但只是觉得这样会更快?

 **TableName, columnFamily, column**
 test:table     collected:url

谢谢。

编辑:

尝试了以下方法:

  scan 'test:table',{ COLUMNS => 'collected:url', LIMIT => 10, FILTER => "ValueFilter( =, 'binaryprefix:<>' )"}

没有结果,所以它可能有效,但这看起来正确吗?

编辑 2:

返回错误:

     hbase(main):008:0> scan 'test:table', {FILTER => 
    SingleColumnValueFilter.new(Bytes.toBytes('collected'), 
    Bytes.toBytes('url'), CompareFilter::CompareOp.valueOf('EQUAL'), 
    Bytes.toBytes(''), true, true), COLUMNS => 'collected:url' }
    ArgumentError: wrong number of arguments (6 for 4)

你真的不需要猪来解决你的问题。

In Hbase shell SingleColumnValueFilter 应该能帮到你。您需要将 filterIfMissing 设置为 false,这实际上是默认值。所以你的扫描应该是这样的:

import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.util.Bytes

scan 'YourTable', {FILTER => SingleColumnValueFilter.new(Bytes.toBytes('family'), Bytes.toBytes('field'), CompareFilter::CompareOp.valueOf('EQUAL'), Bytes.toBytes('')), COLUMNS => 'family:field' }

你接近 ValueFilter,下面的命令对我有用:

scan 'item', {LIMIT=>5, COLUMNS => ['data:index'], FILTER => "ValueFilter(=, 'binary:')"}