zoukankan      html  css  js  c++  java
  • 【原创】HBase 查询过程中关于scan.setFilter和scan.addColumn的使用

    在对HBase数据库的查询中,用到了SingleColumnValueFilter用于实现对于时间列中某一段时间记录的过滤,并且使用scan.addColumn获取结果中的某一列,

    具体使用如下:

    Scan scan = new Scan();  

    List<Filter> filters = new ArrayList<Filter>();

    String stime = “2012-12-16 00:00:00”;

    String etime= “2012-12-16 00:00:10”;

    Filter filter1 = new SingleColumnValueFilter(cfs[0].getNameAsString().getBytes(),
    "rTime".getBytes(), CompareOp.GREATER_OR_EQUAL,Bytes.toBytes(stime)); 
    filters.add(filter1);

    Filter filter2 = new SingleColumnValueFilter(cfs[0].getNameAsString().getBytes(),
    "rTime".getBytes(), CompareOp.LESS_OR_EQUAL,Bytes.toBytes(etime));
    filters.add(filter2);

    scan.setFilter(filterList1);
    scan.addColumn(cfs[0].getNameAsString().getBytes(), "CARNO".getBytes());
    ResultScanner rs = table.getScanner(scan);

    但是在程序运行中发现,SingleColumnValueFilter设置的时间区间不起作用,返回的是全部的CARNO。但是在加入“scan.addColumn(cfs[0].getNameAsString().getBytes(), "rTime".getBytes());”后,查询结果正确。由此可见如果scan.addColumn中的列不包括在SingleColumnValueFilter中设置的列时,SingleColumnValueFilter是不起作用的。但是不明白这是为神马。。。。。

    此外在测试过程中还发现,对于sql语句

    "select count(*) from monitor where RECORDTIME >=to_date ('2012-12-16 01:00:00','yyyy-mm-dd hh24:mi:ss') and RECORDTIME <=to_date('2012-12-16 02:00:00','yyyy-mm-dd hh24:mi:ss') and monitor='jnc842121' "  的查询,在程序中加入“scan.addColumn(cfs[0].getNameAsString().getBytes(), "rTime".getBytes());” 后,查询时候条件monitor='jnc842121' 不起作用,再加入“MONITOR”列时:“scan.addColumn(cfs[0].getNameAsString().getBytes(), "MONITOR".getBytes())” 结果才是正确的。
     

    select monitor,carno from monitor where recordtime >=to_date ('2012-12-16 00:59:52','yyyy-mm-dd hh24:mi:ss') and recordtime <=to_date('2012-12-16 00:59:52','yyyy-mm-dd hh24:mi:ss') and carno='P5SQ27';当条件中有carno='P5SQ27'这种条件时,在select后面跟的列里面必须含有条件中对应的列,查询出来的结果才正确。

    相同问题的博客:hbase scan中匪夷所思的SingleColumnValueFilter和COLUMNS

  • 相关阅读:
    spring异常
    springboot+mybatis
    mybatis初识
    模板引擎Dot
    mysql数据库操作
    1. 安装Oracle,配置环境 2. 实现查询From子句 3. 实现查询where子句 4. 实现查询order by子句
    (1)Set集合 (2)Map集合 (3)异常机制
    (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型
    (1)线程的常用方法 (2)线程的同步机制 (3)网络编程的常识
    (1)I/O流 (2)线程
  • 原文地址:https://www.cnblogs.com/nanxin521/p/4182738.html
Copyright © 2011-2022 走看看