SkipFilterの提案はthis answerで間違っていませんが、あなたのケースには当てはまりません(@AdamSkywalkerが指摘したように)。
しかし、あなたは範囲についてColumnRangeFiltersのトップ[「0」、「FS」)および(「FS」、「Z」]上に2つの別々のSkipFiltersを作成することができます。そして、これらのフィルタはFilterListとMUST_PASS_ONE FilterListの組み合わせルールと組み合わせる必要があります。
HBaseのシェルで試験することができる
例コード:
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.filter.ColumnRangeFilter
import org.apache.hadoop.hbase.filter.SkipFilter
import org.apache.hadoop.hbase.filter.FilterList
import org.apache.hadoop.hbase.filter.FilterList.Operator
scan 'table', {FILTER => FilterList.new(FilterList::Operator::MUST_PASS_ONE,SkipFilter.new(ColumnRangeFilter.new(Bytes.toBytes("0"), true, Bytes.toBytes("fs"), false)),SkipFilter.new(ColumnRangeFilter.new(Bytes.toBytes("fs"), false, Bytes.toBytes("z"), true)))}
のJava APIのコードでは、あなたのフィルターはそのようになります。
SkipFilter range1 = new SkipFilter(new ColumnRangeFilter(Bytes.toBytes("0"), true, Bytes.toBytes("fs"), false));
SkipFilter range2 = new SkipFilter(new ColumnRangeFilter(Bytes.toBytes("fs"), false, Bytes.toBytes("z"), true))
FilterList filter = new FilterList(FilterList.Operator.MUST_PASS_ONE, range1, range2)
この例では、列名の範囲は印字可能な記号に限定されています。バイト配列を列名として使用する場合は、より広い範囲を定義する必要があります。
SkipFilterの提案は間違っていました。セルがフィルタ条件と一致しない場合、行全体がフィルタリングされます。私はあなたの行が 'fs'列で他のいくつかの列も持っていると推測し、フィルタリングされます。 – AdamSkywalker
はい、他の列も持っています – Peter