hbase RowFilter
RowFilterはrow keyをフィルタするために使用されます
Operator
Description
より小さい
以下
に等しい
等しくない
以上
より大きい
すべて除外
Comparator
Description
Bytesを使用します.compareTo()比較
BinaryComparatorとの差は少なく、前から比較
Does not compare against an actual value but whether a given one is
Performs a bitwise comparison, providing a
正規表現
データを文字列としてcontains()で判断する
出力結果
リファレンス
hbase権威ガイドライン
Operator
Description
LESS
より小さい
LESS_OR_EQUAL
以下
EQUAL
に等しい
NOT_EQUAL
等しくない
GREATER_OR_EQUAL
以上
GREATER
より大きい
NO_OP
すべて除外
Comparator
Description
BinaryComparator
Bytesを使用します.compareTo()比較
BinaryPrefixComparator
BinaryComparatorとの差は少なく、前から比較
NullComparator
Does not compare against an actual value but whether a given one is
null
, or not null
. BitComparator
Performs a bitwise comparison, providing a
BitwiseOp
class with AND
, OR
, and XOR
operators. RegexStringComparator
正規表現
SubstringComparator
データを文字列としてcontains()で判断する
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.BinaryComparator;
import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.RegexStringComparator;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.SubstringComparator;
public class TestHbaseRowFilter {
String tableName = "test_row_filter";
Configuration config = HBaseConfiguration.create();
/**
* hbase
* @throws IOException
*/
public void testRowFilter() throws IOException {
HTable table = new HTable(config, tableName);
Scan scan = new Scan();
System.out.println(" row010 ");
Filter filter1 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,
new BinaryComparator("row010".getBytes()));
scan.setFilter(filter1);
ResultScanner scanner1 = table.getScanner(scan);
for (Result res : scanner1) {
System.out.println(res);
}
scanner1.close();
System.out.println(" 5 ");
Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQUAL,
new RegexStringComparator(".*5$"));
scan.setFilter(filter2);
ResultScanner scanner2 = table.getScanner(scan);
for (Result res : scanner2) {
System.out.println(res);
}
scanner2.close();
System.out.println(" 5 ");
Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL,
new SubstringComparator("5"));
scan.setFilter(filter3);
ResultScanner scanner3 = table.getScanner(scan);
for (Result res : scanner3) {
System.out.println(res);
}
scanner3.close();
System.out.println(" row01 ");
Filter filter4 = new RowFilter(CompareFilter.CompareOp.EQUAL,
new BinaryPrefixComparator("row01".getBytes()));
scan.setFilter(filter4);
ResultScanner scanner4 = table.getScanner(scan);
for (Result res : scanner4) {
System.out.println(res);
}
scanner3.close();
}
/**
*
*/
public void init() {
//
try {
HBaseAdmin admin = new HBaseAdmin(config);
if (!admin.tableExists(tableName)) {
HTableDescriptor htd = new HTableDescriptor(tableName);
HColumnDescriptor hcd1 = new HColumnDescriptor("data");
htd.addFamily(hcd1);
HColumnDescriptor hcd2 = new HColumnDescriptor("url");
htd.addFamily(hcd2);
admin.createTable(htd);
}
HTable table = new HTable(config, tableName);
table.setAutoFlush(false);
int count = 50;
for (int i = 1; i <= count; ++i) {
Put p = new Put(String.format("row%03d", i).getBytes());
p.add("data".getBytes(), String.format("col%01d", i % 10)
.getBytes(), String.format("data%03d", i).getBytes());
p.add("url".getBytes(), String.format("col%01d", i % 10)
.getBytes(), String.format("url%03d", i).getBytes());
table.put(p);
}
table.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
TestHbaseRowFilter test = new TestHbaseRowFilter();
test.init();
test.testRowFilter();
}
}
出力結果
row010
keyvalues={row001/data:col1/1364133382268/Put/vlen=7, row001/url:col1/1364133382268/Put/vlen=6}
keyvalues={row002/data:col2/1364133382268/Put/vlen=7, row002/url:col2/1364133382268/Put/vlen=6}
keyvalues={row003/data:col3/1364133382268/Put/vlen=7, row003/url:col3/1364133382268/Put/vlen=6}
keyvalues={row004/data:col4/1364133382268/Put/vlen=7, row004/url:col4/1364133382268/Put/vlen=6}
keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
keyvalues={row006/data:col6/1364133382268/Put/vlen=7, row006/url:col6/1364133382268/Put/vlen=6}
keyvalues={row007/data:col7/1364133382268/Put/vlen=7, row007/url:col7/1364133382268/Put/vlen=6}
keyvalues={row008/data:col8/1364133382268/Put/vlen=7, row008/url:col8/1364133382268/Put/vlen=6}
keyvalues={row009/data:col9/1364133382268/Put/vlen=7, row009/url:col9/1364133382268/Put/vlen=6}
keyvalues={row010/data:col0/1364133382268/Put/vlen=7, row010/url:col0/1364133382268/Put/vlen=6}
5
keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
keyvalues={row025/data:col5/1364133382268/Put/vlen=7, row025/url:col5/1364133382268/Put/vlen=6}
keyvalues={row035/data:col5/1364133382268/Put/vlen=7, row035/url:col5/1364133382268/Put/vlen=6}
keyvalues={row045/data:col5/1364133382268/Put/vlen=7, row045/url:col5/1364133382268/Put/vlen=6}
5
keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
keyvalues={row025/data:col5/1364133382268/Put/vlen=7, row025/url:col5/1364133382268/Put/vlen=6}
keyvalues={row035/data:col5/1364133382268/Put/vlen=7, row035/url:col5/1364133382268/Put/vlen=6}
keyvalues={row045/data:col5/1364133382268/Put/vlen=7, row045/url:col5/1364133382268/Put/vlen=6}
keyvalues={row050/data:col0/1364133382268/Put/vlen=7, row050/url:col0/1364133382268/Put/vlen=6}
row01
keyvalues={row010/data:col0/1364133382268/Put/vlen=7, row010/url:col0/1364133382268/Put/vlen=6}
keyvalues={row011/data:col1/1364133382268/Put/vlen=7, row011/url:col1/1364133382268/Put/vlen=6}
keyvalues={row012/data:col2/1364133382268/Put/vlen=7, row012/url:col2/1364133382268/Put/vlen=6}
keyvalues={row013/data:col3/1364133382268/Put/vlen=7, row013/url:col3/1364133382268/Put/vlen=6}
keyvalues={row014/data:col4/1364133382268/Put/vlen=7, row014/url:col4/1364133382268/Put/vlen=6}
keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
keyvalues={row016/data:col6/1364133382268/Put/vlen=7, row016/url:col6/1364133382268/Put/vlen=6}
keyvalues={row017/data:col7/1364133382268/Put/vlen=7, row017/url:col7/1364133382268/Put/vlen=6}
keyvalues={row018/data:col8/1364133382268/Put/vlen=7, row018/url:col8/1364133382268/Put/vlen=6}
keyvalues={row019/data:col9/1364133382268/Put/vlen=7, row019/url:col9/1364133382268/Put/vlen=6}
リファレンス
hbase権威ガイドライン