Hbase scan通过rowkey条件查询
2017-11-27 09:48
148 查看
Configuration config = new Configuration();
config.set("hbase.zookeeper.quorum", "10.1.1.1");//需根据hbase配置进行设置
HBaseConfiguration hbaseConfig = new HBaseConfiguration(config);
Scan scan = new Scan();
scan.setStartRow(Bytes.toBytes(time1+uid));
scan.setStopRow(Bytes.toBytes(time2+uid));
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator(".*"+uid));
scan.setFilter(filter);
ResultScanner rs = null;
HTable table = new HTable(hbaseConfig, Bytes.toBytes(tableName));
String rowkey = null;
rs = table.getScanner(scan);
for (Result r : rs) {
for (KeyValue kv : r.list()) {
rowkey = Bytes.toString(kv.getRow());
System.out.println(rowkey);
}
}
一般rowkey的名字是uuid+time. 如果只想用uuid模糊查询,可以这样。
注意:rowkey必须是跟时间信息的。如: new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:00").format(new Date())+name形式。
config.set("hbase.zookeeper.quorum", "10.1.1.1");//需根据hbase配置进行设置
HBaseConfiguration hbaseConfig = new HBaseConfiguration(config);
Scan scan = new Scan();
scan.setStartRow(Bytes.toBytes(time1+uid));
scan.setStopRow(Bytes.toBytes(time2+uid));
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator(".*"+uid));
scan.setFilter(filter);
ResultScanner rs = null;
HTable table = new HTable(hbaseConfig, Bytes.toBytes(tableName));
String rowkey = null;
rs = table.getScanner(scan);
for (Result r : rs) {
for (KeyValue kv : r.list()) {
rowkey = Bytes.toString(kv.getRow());
System.out.println(rowkey);
}
}
一般rowkey的名字是uuid+time. 如果只想用uuid模糊查询,可以这样。
public static List<Map<String,String>> getList(String tableName,String starttime,String stoptime,String uuid,String muuid) throws IOException{ HTablePool pool = new HTablePool(configuration, 1000); uuid = "285836d1-cc0f-11e7-982d-00163e32a1d5"; /* Filter filter1 = new SingleColumnValueFilter(Bytes .toBytes("MpsId"), null, CompareOp.EQUAL, Bytes .toBytes(muuid));*/ //时间段查询 Scan scan = new Scan(); scan.addFamily(Bytes.toBytes("automate")); scan.setStartRow(Bytes.toBytes(uuid+"_"+starttime)); scan.setStopRow(Bytes.toBytes(uuid+"_"+stoptime)); // scan.setFilter(filter1); List<Map<String, String>> list = new ArrayList<>(); Map<String, String> maps = new LinkedHashMap<>(); ResultScanner scanner1 = pool.getTable(tableName).getScanner(scan); //ResultScanner scanner1 = table.getScanner(scan); for (Result res : scanner1) { Map<String, String> map = new LinkedHashMap<>(); System.out.println("==="+res.toString()); for (KeyValue kv : res.raw()) { //测量值 if(new String(kv.getQualifier()).equals("MeasValue")){ System.err.println( new String(kv.getQualifier()) + ":" + (int)(Float.parseFloat(new String(kv.getValue()))*100)/100.0); map.put(new String(kv.getQualifier()), new String(kv.getValue())); } //差值 if(new String(kv.getQualifier()).equals("DiffValue")){ System.err.println( new String(kv.getQualifier()) + ":" + (int)(Float.parseFloat(new String(kv.getValue()))*100)/100.0); map.put(new String(kv.getQualifier()), new String(kv.getValue())); } //累计 if(new String(kv.getQualifier()).equals("AccValue")){ System.err.println( new String(kv.getQualifier()) + ":" + (int)(Float.parseFloat(new String(kv.getValue()))*100)/100.0); map.put(new String(kv.getQualifier()), new String(kv.getValue())); } //时间 if(new String(kv.getQualifier()).equals("MeasTime")){ System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue())); map.put(new String(kv.getQualifier()), new String(kv.getValue())); } if(new String(kv.getQualifier()).equals("CH1")){ System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue())); } if(new String(kv.getQualifier()).equals("CH2")){ System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue())); } if(new String(kv.getQualifier()).equals("CH3")){ System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue())); } if(new String(kv.getQualifier()).equals("CH1")){ System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue())); } if(new String(kv.getQualifier()).equals("CH2")){ System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue())); } if(new String(kv.getQualifier()).equals("CH3")){ System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue())); } if(new String(kv.getQualifier()).equals("V0")){ System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue())); } } } scanner1.close(); list.add(maps); return list; }以上是实现通过时间段查询hbase里的数据。
注意:rowkey必须是跟时间信息的。如: new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:00").format(new Date())+name形式。
相关文章推荐
- ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)
- cassandra——可以预料的查询,如果你的查询条件有一个是根据索引查询,那其它非索引非主键字段,可以通过加一个ALLOW FILTERING来过滤实现
- 使用ADF-BC 实现查询功能之四:通过代码动态设置Where条件参数
- vs2015 c#通过ComboBox选择查询类别并在TextBox输入条件进行查询
- 通过LINQ表达式树动态构建查询条件
- oracle数据库查询通过一个待查询字段的值组装不同的条件
- 通过组合条件对DAO进行查询操作
- 表单POST请求服务器,通过多条件查询获取数据库数据
- 在sqlplus中通过数据字典按条件查询信息(针对oracle),显示未选定行
- hbase 利用rowkey设计进行多条件查询
- 通过条件的查询----涉及到三层(Action Service DAO)
- mysql 通过查询条件查出指定字段记录数。
- PHP连接数据库&通过下拉列表及具体条件查询数据
- 使用ADF-BC 实现查询功能之八:通过代码动态设置Criteria条件参数
- flex ibatis java 通过sql语句进行多条件模糊查询。
- 组合查询(通过Criteria接口实现动态构造查询条件)
- 页面加载完成后通过查询条件给easyui datagrid赋值,请求两次,并且值不显示问题
- Hbase 行键设计(rowkey) 实现多条件查询
- 通过实体反射实现CriteriaQuery并列条件查询
- sql 一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。