扫描 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:')"}
我想在 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:')"}