java实现Hbase中的查询(一)Filter方式


1、需要的jar包:

commons-codec-1.4.jar

commons-logging-1.0.4.jar

hadoop-0.20.2-core.jar

hbase-0.20.6.jar

log4j-1.2.15.jar

zookeeper-3.2.2.jar

2、已有表结构:

1、表名:scores

2、列族:

course:art

course:math

grade:

3、scan 'scores'的内容:

ROW COLUMN+CELL
Jerry column=course:art, timestamp=1301294630194, value=80
Jerry column=course:math, timestamp=1301294630132, value=100
Jerry column=grade:, timestamp=1301294630073, value=2
Jim column=course:art, timestamp=1301294630363, value=97
Jim column=course:math, timestamp=1301294630305, value=100
Jim column=grade:, timestamp=1301294630247, value=3
Tom column=course:art, timestamp=1301294630015, value=97
Tom column=course:math, timestamp=1301294629987, value=87
Tom column=grade:, timestamp=1301294629931, value=1

4、代码:

[java:nogutter] view plain copy
  1. packageorg.myhbase;
  2. importjava.io.IOException;
  3. importjava.util.ArrayList;
  4. importjava.util.List;
  5. importorg.apache.hadoop.conf.Configuration;
  6. importorg.apache.hadoop.hbase.HBaseConfiguration;
  7. importorg.apache.hadoop.hbase.KeyValue;
  8. importorg.apache.hadoop.hbase.client.Get;
  9. importorg.apache.hadoop.hbase.client.HTable;
  10. importorg.apache.hadoop.hbase.client.Result;
  11. importorg.apache.hadoop.hbase.client.ResultScanner;
  12. importorg.apache.hadoop.hbase.client.Scan;
  13. importorg.apache.hadoop.hbase.filter.FilterList;
  14. importorg.apache.hadoop.hbase.filter.SingleColumnValueFilter;
  15. importorg.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
  16. importorg.apache.hadoop.hbase.io.Cell;
  17. importorg.apache.hadoop.hbase.util.Bytes;
  18. publicclassHBaseBasic03{
  19. privatestaticHBaseConfigurationhbaseConfig=null;
  20. static{
  21. Configurationconfig=newConfiguration();
  22. config.set("hbase.zookeeper.quorum","192.168.10.149,192.168.10.44,192.168.10.49");
  23. config.set("hbase.zookeeper.property.clientPort","2181");
  24. hbaseConfig=newHBaseConfiguration(config);
  25. }
  26. /**
  27. *get方式,通过rowKey查询
  28. *@paramtablename
  29. *@paramrowKey
  30. *@throwsIOException
  31. */
  32. publicstaticvoidselectByRowKey(Stringtablename,StringrowKey)throwsIOException{
  33. HTabletable=newHTable(hbaseConfig,tablename);
  34. Getg=newGet(Bytes.toBytes(rowKey));
  35. Resultr=table.get(g);
  36. for(KeyValuekv:r.raw()){
  37. System.out.println("column:"+newString(kv.getColumn()));
  38. System.out.println("value:"+newString(kv.getValue()));
  39. }
  40. }
  41. /**
  42. *get方式,通过rowKey、column查询
  43. *@paramtablename
  44. *@paramrowKey
  45. *@paramcolumn
  46. *@throwsIOException
  47. */
  48. publicstaticvoidselectByRowKeyColumn(Stringtablename,StringrowKey,Stringcolumn)throwsIOException{
  49. HTabletable=newHTable(hbaseConfig,tablename);
  50. Getg=newGet(Bytes.toBytes(rowKey));
  51. g.addColumn(Bytes.toBytes(column));
  52. Resultr=table.get(g);
  53. for(KeyValuekv:r.raw()){
  54. System.out.println("column:"+newString(kv.getColumn()));
  55. System.out.println("value:"+newString(kv.getValue()));
  56. }
  57. }
  58. publicstaticvoidselectByFilter(Stringtablename,List<String>arr)throwsIOException{
  59. HTabletable=newHTable(hbaseConfig,tablename);
  60. FilterListfilterList=newFilterList();
  61. Scans1=newScan();
  62. for(Stringv:arr){//各个条件之间是“与”的关系
  63. String[]s=v.split(",");
  64. filterList.addFilter(newSingleColumnValueFilter(Bytes.toBytes(s[0]),
  65. Bytes.toBytes(s[1]),
  66. CompareOp.EQUAL,Bytes.toBytes(s[2])
  67. )
  68. );
  69. //添加下面这一行后,则只返回指定的cell,同一行中的其他cell不返回
  70. //s1.addColumn(Bytes.toBytes(s[0]),Bytes.toBytes(s[1]));
  71. }
  72. s1.setFilter(filterList);
  73. ResultScannerResultScannerFilterList=table.getScanner(s1);
  74. for(Resultrr=ResultScannerFilterList.next();rr!=null;rr=ResultScannerFilterList.next()){
  75. for(KeyValuekv:rr.list()){
  76. System.out.println("row:"+newString(kv.getRow()));
  77. System.out.println("column:"+newString(kv.getColumn()));
  78. System.out.println("value:"+newString(kv.getValue()));
  79. }
  80. }
  81. }
  82. publicstaticvoidmain(String[]args)throwsIOException{
  83. //按rowkey查询,查询Tom行的所有cell
  84. HBaseBasic03.selectByRowKey("scores","Tom");
  85. //按rokey和column来查询,查询Tom行course列族的所有列值
  86. HBaseBasic03.selectByRowKeyColumn("scores","Tom","course");
  87. //Filter多条件查询,条件:查询course列族中art列值为97,且course列族中math列值为100的行
  88. List<String>arr=newArrayList<String>();
  89. arr.add("course,art,97");
  90. arr.add("course,math,100");
  91. HBaseBasic03.selectByFilter("scores",arr);
  92. }
  93. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值