欢迎投稿

今日深度:

[hbase]使用HBase的Java api查询HBase,

[hbase]使用HBase的Java api查询HBase,


查询操作,不管是关系型数据库,还是非关系型数据库,相对于增删改,都占了很大的比重。

查询不易,且行且珍惜。

使用HBase的java api来进行查询,主要有两种方式,一种是直接通过rowkey(类似于主键)来查询;另一种是scan,扫描表(扫描某一列族,扫描某一colume,以rowkey的开始和结束做为一个范围进行扫描)
1、通过rowkey来查询一条记录

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 //根据rowkey查询一条记录 public void queryByRowKey(Configuration conf,String tableName,String rowKey){ HTable hTable = null; try { hTable =new HTable(conf, tableName); Get get =new Get( rowKey.getBytes()); Result result = hTable.get(get); System.err.println("rowkey为:" + rowKey); HashMap<String, String> hm =new HashMap<String, String>(); for (KeyValue kv: result.raw()) { hm.put(new String(kv.getFamily()) ,new String(kv.getValue())); System.err.println("rowkey:" +new String(kv.getKey())); System.err.println("-------------------------------"); System.err.println("columnFamily:" +new String(kv.getFamily()) +"===column:" +new String(kv.getQualifier()) +"===getValue:" +new String(kv.getValue())); } System.err.println(hm.size()); System.err.println(hm.toString()); }catch (IOException e) { e.printStackTrace(); }finally { try { hTable.close(); }catch (IOException e) { e.printStackTrace(); } } }

2、扫描整个表

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 //扫描hbase表,获取所有记录 public void getAllRow(Configuration conf, String tableName){ HTable hTable = null; ResultScanner rs = null; try { hTable =new HTable(conf,"DANIU"); rs = hTable.getScanner(new Scan()); //循环rowkey for (Result result : rs) { for (KeyValue kv : result.raw()) { System.err.println("rowkey:" +new String(kv.getKey())); System.err.println("-------------------------------"); System.err.println("columnFamily:" +new String(kv.getFamily()) +"===column:" +new String(kv.getQualifier()) +"===getValue:" +new String(kv.getValue())); } } }catch (IOException e) { e.printStackTrace(); }finally{ rs.close(); try { hTable.close(); }catch (IOException e) { e.printStackTrace(); } } }

3、根据一个条件,扫描。使用一个filter

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 //根据查询多条记录,一个filter的使用 public void filterSingleColumnValueFilter(Configuration conf,String tableName){ HTable hTable = null; ResultScanner rs = null; try { hTable =new HTable(conf, tableName); Filter filter =new SingleColumnValueFilter("columnfamily1".getBytes(), null, CompareOp.EQUAL,"value1".getBytes()); Scan scan =new Scan(); scan.setFilter(filter); rs = hTable.getScanner(scan); for (Result result : rs) { for (KeyValue kv : result.raw()) { System.err.println("rowkey:" +new String(kv.getKey())); System.err.println("-------------------------------"); System.err.println("columnFamily:" +new String(kv.getFamily()) +"===column:" +new String(kv.getQualifier()) +"===getValue:" +new String(kv.getValue())); } } }catch (IOException e) { e.printStackTrace(); }finally{ rs.close(); try { hTable.close(); }catch (IOException e) { e.printStackTrace(); } } }

4、使用多个条件来查询数据。多个filter的使用。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 //更多条件,查询更多数据,多个filter的使用。 public void filterMore(Configuration conf,String tableName){ HTable hTable = null; ResultScanner rs = null; try { hTable =new HTable(conf, tableName); List<Filter> filters =new ArrayList<Filter>(); Filter filter1 =new SingleColumnValueFilter("columnfamily1".getBytes(), null, CompareOp.EQUAL,"value1".getBytes()); filters.add(filter1); Filter filter2 =new SingleColumnValueFilter("columnfamily2".getBytes(), null, CompareOp.EQUAL,"value2".getBytes()); filters.add(filter2); //还可以添加更多的filter Scan scan =new Scan(); rs = hTable.getScanner(scan); for (Result result : rs) { for (KeyValue kv : result.raw()) { System.err.println("rowkey:" +new String(kv.getKey())); System.err.println("-------------------------------"); System.err.println("columnFamily:" +new String(kv.getFamily()) +"===column:" +new String(kv.getQualifier()) +"===getValue:" +new String(kv.getValue())); } } }catch (IOException e) { e.printStackTrace(); }finally{ rs.close(); try { hTable.close(); }catch (IOException e) { e.printStackTrace(); } } }

www.htsjk.Com true http://www.htsjk.com/hbase/38266.html NewsArticle [hbase]使用HBase的Java api查询HBase, 查询操作,不管是关系型数据库,还是非关系型数据库,相对于增删改,都占了很大的比重。 查询不易,且行且珍惜。 使用HBase的java api来进行查询,...
相关文章
    暂无相关文章
评论暂时关闭