與SkipFilter在this answer的建議沒有錯,但不適用於您的情況(正如@AdamSkywalker指出的那樣)。
但是你可以創建爲範圍的ColumnRangeFilters頂部[「0」,「FS」)和(「FS」,「Z」]兩個獨立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