1. import org.apache.hadoop.conf.Configuration;
  2. import org.apache.hadoop.hbase.CellScanner;
  3. import org.apache.hadoop.hbase.HBaseConfiguration;
  4. import org.apache.hadoop.hbase.TableName;
  5. import org.apache.hadoop.hbase.client.*;
  6. import org.apache.hadoop.hbase.util.Bytes;
  7.  
  8. import java.io.IOException;
  9.  
  10. /**
  11. * Created by similarface on 16/8/22.
  12. */
  13. public class RetrievesRequestedRowNecessary {
  14. public static void main(String args[]) throws IOException {
  15. Configuration configuration = HBaseConfiguration.create();
  16. Connection connection = ConnectionFactory.createConnection(configuration);
  17. //建立表的连接
  18. Table table = connection.getTable(TableName.valueOf("testtable"));
  19.  
  20. //获取行键 企图获取一个不存在的行
  21. Get get1 = new Get(Bytes.toBytes("95599"));
  22. //添加查询的列族和列限定符号
  23. get1.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"));
  24. //获取结果级
  25. Result result1 = table.get(get1);
  26. //结果集是否为空 ==> Get 1 isEmpty: true
  27. System.out.println("Get 1 isEmpty: " + result1.isEmpty());
  28. //根据result获取游标
  29. CellScanner scanner1 = result1.cellScanner();
  30. //循环遍历结果集的数据 当然是没有任何数据
  31. while (scanner1.advance()) {
  32. System.out.println("Get 1 Cell: " + scanner1.current());
  33. }
  34.  
  35. //95599行键的值 数据库不存在这行数据
  36. Get get2 = new Get(Bytes.toBytes("95599"));
  37. //指定列族和列限定符
  38. get2.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"));
  39. //95599这行是在数据库中没有的 setClosestRowBefore 会试图去取前面的行如果有必要的话
  40. get2.setClosestRowBefore(true);
  41. //获取数据集 ==> Get 2 isEmpty: false
  42. Result result2 = table.get(get2);
  43. System.out.println("Get 2 isEmpty: " + result2.isEmpty());
  44. //继续获取游标
  45. CellScanner scanner2 = result2.cellScanner();
  46. //遍历游标获取数据 ==> Get 2 Cell: 10086/colfam1:qual1/1471836722159/Put/vlen=12/seqid=0
  47. while (scanner2.advance()) {
  48. System.out.println("Get 2 Cell: " + scanner2.current());
  49. }
  50.  
  51. //这行数据库是存在的
  52. Get get3 = new Get(Bytes.toBytes("10010"));
  53. get3.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual2"));
  54. //依然+了setClosestRowBefore
  55. get3.setClosestRowBefore(true);
  56. // ==> Get 3 isEmpty: false
  57. Result result3 = table.get(get3);
  58. System.out.println("Get 3 isEmpty: " + result3.isEmpty());
  59. CellScanner scanner3 = result3.cellScanner();
  60. //如果存在行还是取出的该行的数据
  61. while (scanner3.advance()) {
  62. //叫了setClosestRowBefore 的作用在这儿是请求列族中的所有列分隔的字段都要取出来
  63. // Get 3 Cell: 10010/colfam1:qual1/1471836722159/Put/vlen=12/seqid=0
  64. // Get 3 Cell: 10010/colfam1:qual2/1471836722159/Put/vlen=18/seqid=0
  65. System.out.println("Get 3 Cell: " + scanner3.current());
  66. }
  67.  
  68. Get get4 = new Get(Bytes.toBytes("10086"));
  69. get4.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"));
  70. //Get 4 isEmpty: false
  71. Result result4 = table.get(get4);
  72. System.out.println("Get 4 isEmpty: " + result4.isEmpty());
  73. CellScanner scanner4 = result4.cellScanner();
  74. while (scanner4.advance()) {
  75. //Get 4 Cell: 10086/colfam1:qual1/1471836722159/Put/vlen=12/seqid=0
  76. System.out.println("Get 4 Cell: " + scanner4.current());
  77. }
  78. }
  79. }
  80. /**
  81. Get 1 isEmpty: false
  82. Get 1 Cell: 10086/colfam1:qual1/1471836722159/Put/vlen=12/seqid=0
  83. Get 2 isEmpty: false
  84. Get 2 Cell: 10086/colfam1:qual1/1471836722159/Put/vlen=12/seqid=0
  85. Get 3 isEmpty: false
  86. Get 3 Cell: 10010/colfam1:qual1/1471836722159/Put/vlen=12/seqid=0
  87. Get 3 Cell: 10010/colfam1:qual2/1471836722159/Put/vlen=18/seqid=0
  88. Get 4 isEmpty: false
  89. Get 4 Cell: 10086/colfam1:qual1/1471836722159/Put/vlen=12/seqid=0
  90.  
  91. **/

Hbase之必要时取出请求的行(列族所有数据)的更多相关文章

  1. Hbase之尝试使用错误列族获取数据

    import com.google.common.base.Strings; import org.apache.hadoop.conf.Configuration; import org.apach ...

  2. 为什么不建议在 HBase 中使用过多的列族

    我们知道,一张 HBase 表包含一个或多个列族.HBase 的官方文档中关于 HBase 表的列族的个数有两处描述: A typical schema has between 1 and 3 col ...

  3. 深入学习hbase:表,列族,列标识,版本和cell

    HBase是面向列的分布式的数据库,和传统的关系型数据库有很大的不同:物理模型和逻辑模型.这里我们要首先讲一下HBase数据库相关的区别于关系型数据库的几个基本概念:          表:HBase ...

  4. HBase的java操作,最新API。(查询指定行、列、插入数据等)

    关于HBase环境搭建和HBase的原理架构,请见笔者相关博客. 1.HBase对java有着较优秀的支持,本文将介绍如何使用java操作Hbase. 首先是pom依赖: <dependency ...

  5. HBase列族高级配置

    转自:http://blog.sina.com.cn/s/blog_ae33b83901018euz.html ------------------ HBase有几个高级特性,在你设计表时可以使用.这 ...

  6. HBASE列族不能太多的真相 (一个table有几个列族就有几个 Store)

    HRegionServer内部管理了一系列HRegion对象,每个HRegion对 应了table中的一个region,HRegion中由多 个HStore组成.每个HStore对应了Table中的一 ...

  7. HBase最佳实践-列族设计优化

    本文转自hbase.收藏学习下. 随着大数据的越来越普及,HBase也变得越来越流行.会用HBase现在已经变的并不困难,然而,怎么把它用的更好却并不简单.那怎么定义'用的好'呢?很简单,在保证系统稳 ...

  8. 数据源、数据集、同步任务、数据仓库、元数据、数据目录、主题、来源系统、标签、增量识别字段、修改同步、ES索引、HBase列族、元数据同步、

    数据源.数据集.同步任务.数据仓库.元数据.数据目录.主题.来源系统.标签. 增量识别字段.修改同步.ES索引.HBase列族.元数据同步.DS.ODS.DW.DM.zk集群地址 == 数据源 数据源 ...

  9. hbase源码系列(四)数据模型-表定义和列族定义的具体含义

    hbase是一个KeyValue型的数据库,在<hbase实战>描述它的逻辑模型[行键,列族,列限定符,时间版本],物理模型是基于列族的.但实际情况是啥?还是上点代码吧. HTableDe ...

随机推荐

  1. Uva 10129 单词

    题目链接:https://uva.onlinejudge.org/external/101/10129.pdf 把单词的首字母和最后一个字母看做节点,一个单词就是一个有向边.有向图的欧拉定理,就是除了 ...

  2. UVa(12821),MCMF

    题目链接:https://uva.onlinejudge.org/external/128/12821.pdf 比赛的时候,准备用最短路来做,存两张图,做两次最短路,本来还觉得第二张图的设计很好的,很 ...

  3. Linux sync命令的作用

    adb shell sync 写缓存命令——sync 在用reboot命令启动unix系统后,系统提示出错信息,部分应用程序不能正常工作.经仔细检查系统文件,并和初始的正确备份进行比较,发现某些文件确 ...

  4. js调用MVC3自带js验证

    验证: if ($(this).is("form")) {                        return $(this).validate().checkForm() ...

  5. 改变了一下blog的主题,很开心

    调整了一下博客的样式,之前一直想改变下,一直不会这次终于摸索出来一点,不过是最简单的,就是在管理里面的设置,可以定制css代码,修改修改,页面就跟着你的想法走了,有时间好好修改下,暂时这个样子,简单大 ...

  6. C++ UTF8 UrlEncode(宽字符)(转载)

    转载:http://www.cnblogs.com/newcj/p/3645749.html #include "UrlEncode.h" #include <string& ...

  7. C#控制台基础 函数的参数是接口 实现接口的类都可以作为参数,很好用

    镇场诗: 大梦谁觉,水月中建博客.百千磨难,才知世事无常. 今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1.代 ...

  8. SQL数据库约束行为---防止数据乱填(即数据规范化)

    防止乱填:一.Check约束.按照某种规则对数据进行检查.操作:在表的设计界面中,右击相应的列,选择“CHECK约束”在弹出的对话框中,设置约束的名称和表达式. 代码实现: create table ...

  9. 【转载】STL"源码"剖析-重点知识总结

    原文:STL"源码"剖析-重点知识总结 STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点 ...

  10. SpringMVC 服务器端验证

    1.导入JSR303验证类库Jar包2.在MVC的配置文件中添加<mvc:annotation-driven/>的配置3.在MVC的配置文件中添加验证器的配置4.在接收表单数据的类中添加验 ...