发布网友 发布时间:2022-05-06 08:46
共2个回答
懂视网 时间:2022-05-06 13:08
Hbase ValueFilter用于过滤值 package com.fatkun.filter.comparison;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;impo
Hbase ValueFilter用于过滤值
package com.fatkun.filter.comparison; 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.Get; 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.CompareFilter; import org.apache.hadoop.hbase.filter.Filter; import org.apache.hadoop.hbase.filter.SubstringComparator; import org.apache.hadoop.hbase.filter.ValueFilter; import org.apache.hadoop.hbase.util.Bytes; public class TestHbaseValueFilter { String tableName = "test_value_filter"; Configuration config = HBaseConfiguration.create(); /** * 部分代码来自hbase权威指南 * * @throws IOException */ public void testFilter() throws IOException { HTable table = new HTable(config, tableName); Scan scan = new Scan(); System.out.println("只列出值包含data1的列"); Filter filter1 = new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("data1")); scan.setFilter(filter1); ResultScanner scanner1 = table.getScanner(scan); for (Result res : scanner1) { System.out.println(res); } scanner1.close(); System.out.println("get也可以设置filter"); Get get1 = new Get(Bytes.toBytes("row003")); get1.setFilter(filter1); Result result1 = table.get(get1); System.out.println("Result of get(): " + result1); } /** * 初始化数据 */ public void init() { // 创建表和初始化数据 try { HBaseAdmin admin = new HBaseAdmin(config); if (!admin.tableExists(tableName)) { HTableDescriptor htd = new HTableDescriptor(tableName); HColumnDescriptor hcd1 = new HColumnDescriptor("data1"); htd.addFamily(hcd1); HColumnDescriptor hcd2 = new HColumnDescriptor("data2"); htd.addFamily(hcd2); HColumnDescriptor hcd3 = new HColumnDescriptor("data3"); htd.addFamily(hcd3); 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("data1".getBytes(), String.format("col%01d", i % 10) .getBytes(), String.format("data1%03d", i).getBytes()); p.add("data2".getBytes(), String.format("col%01d", i % 10) .getBytes(), String.format("data2%03d", i).getBytes()); p.add("data3".getBytes(), String.format("col%01d", i % 10) .getBytes(), String.format("data3%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 { TestHbaseValueFilter test = new TestHbaseValueFilter(); test.init(); test.testFilter(); } }
原文地址:Hbase ValueFilter, 感谢原作者分享。
热心网友 时间:2022-05-06 10:16
其实你即使这么用得到了想要的效果,但是这么干也不对!不要通过value来过滤,效率非常低。如果有这种range的查找,一定要在rowkey上下功夫。设计好rowkey才是关键。因为hbase的rowkey是按顺序码放的。