hbase 按时刻查询_Hbase查询工具类,根据时间查询数据

1,需求:已知空气监测数据在hbase中存储,要求按照时间,查询citycode为110000(北京)一个月的数据,数据为每日的监测数据

ID ,CITYCODE,SO2 ,CO,NO2 ,O3, PM10,PM2_5,AQI,MEASURE, TIMEPOINT

13110000020141120,  110000,31,3.939,141,8,368,301,351,6,2014-11-20

5110000020150108,   110000,53,3.305,101,12,176,143,190,4,2015-01-08

key值设计规则:

String yearMoth= "201411"; //年月

String time="20141120"; //年月日

String citycode="1100000"; //城市编码

//hbase 为20个分区,数据进入hbase的分区规则如下

int region=Math.abs((yearMoth+citycode).hashCode())%20; //结果:8

//hbase的key值为

String key =region+citycode+time;

这样设计key的好处是:同一个城市,每个月的数据的分区相同,即region相同,只需要设置startRowkey与endRowKey即可

例如 查询北京 2014 年 11 月的数据

startRowkey:13110000020141100

endRowkey:    13110000020141200  即可

但:如果查询  2014 年11 月20 号  --- 2015年01月08号的数据  则需要把每个月的数据查询出来,合并到一起

以下 为工具类的的方法:

创建 时间范围的javaBean对象

public class TimeRange {

private String startPoint ;

private String endPoint ;

public String getStartPoint() {

return startPoint;

}

public void setStartPoint(String startPoint) {

this.startPoint = startPoint;

}

public String getEndPoint() {

return endPoint;

}

public void setEndPoint(String endPoint) {

this.endPoint = endPoint;

}

public String toString() {

return startPoint + " - " + endPoint ;

}

}

计算时间范围的工具类:

startStr =20141120

endStr=20150108

得到的结果 List 为  20141120-20141201

20141201-20150101

20150101-20150108

/**

* 计算查询时间范围

*/

public static List getCallLogRanges(String startStr , String endStr){

try{

SimpleDateFormat sdfYMD = new SimpleDateFormat("yyyyMMdd");

SimpleDateFormat sdfYM = new SimpleDateFormat("yyyyMM");

DecimalFormat df00 = new DecimalFormat("00");

//

List list = new ArrayList<>();

//字符串时间

String startPrefix = startStr.substring(0, 6);

String endPrefix = endStr.substring(0, 6);

int endDay = Integer.parseInt(endStr.substring(6, 8));

//结束点

String endPoint = endPrefix + df00.format(endDay + 1);

//日历对象

Calendar c = Calendar.getInstance();

//同年月

if (startPrefix.equals(endPrefix)) {

TimeRange range = new TimeRange ();

range.setStartPoint(startStr); //设置起始点

range.setEndPoint(endPoint); //设置结束点

list.add(range);

} else {

//1.起始月

TimeRange range = new TimeRange ();

range.setStartPoint(startStr);

//设置日历的时间对象

c.setTime(sdfYMD.parse(startStr));

c.add(Calendar.MONTH, 1);

range.setEndPoint(sdfYM.format(c.getTime()));

list.add(range);

//是否是最后一月

while (true) {

//到了结束月份

if (endStr.startsWith(sdfYM.format(c.getTime()))) {

range = new TimeRange ();

range.setStartPoint(sdfYM.format(c.getTime()));

range.setEndPoint(endPoint);

list.add(range);

break;

} else {

range = new TimeRange ();

//起始时间

range.setStartPoint(sdfYM.format(c.getTime()));

//增加月份

c.add(Calendar.MONTH, 1);

range.setEndPoint(sdfYM.format(c.getTime()));

list.add(range);

}

}

}

return list ;

}

catch(Exception e){

e.printStackTrace();

}

return null ;

}

Hbase 查询的时 遍历List

public List getLogByContion(String citycode, List ranges) {

Configuration conf = HBaseConfiguration.create();

Connection conn = ConnectionFactory.createConnection(conf);

TableName tableName = TableName.valueOf("hbase:airDay");

table=conn.getTable(tableName);

List list = new ArrayList<>();

try {

for (TimeRange range: ranges) {

Scan scan = new Scan();

//设置扫描起始行 结束行

scan.setStartRow(Bytes.toBytes(HbaseUtils.getStartRowkey(citycode,range.getStartPoint())));

scan.setStopRow(Bytes.toBytes(HbaseUtils.getStopRowkey(citycode,range.getStartPoint(),range.getEndPoint())));

ResultScanner rs = table.getScanner(scan);

Iterator it = rs.iterator();

byte[] f1 = Bytes.toBytes("f1");

byte[] caller = Bytes.toBytes("citycode");

byte[] callee = Bytes.toBytes("so2");

byte[] callTime = Bytes.toBytes("co");

byte[] callDuration = Bytes.toBytes("no2");

while (it.hasNext()) {

Result r = it.next();

Map map = new HashMap();

map.put("rowkey",Bytes.toString(r.getRow()));

map.put("caller",Bytes.toString(r.getValue(f1,citycode)));

map.put("callee",Bytes.toString(r.getValue(f1,so2)));

map.put("callTime",Bytes.toString(r.getValue(f1,co)));

map.put("callDuration",Bytes.toString(r.getValue(f1,no2)));

list.add(map);

}

}

}catch (Exception e){

}

return list;

}

public static String getStartRowkey(String citycode, String time) {

int region=Math.abs((yearMoth+citycode).hashCode())%20;

return region+citycode+time;

}

public static String getStopRowkey(String citycode,String starttime, String endtime) {

int region=Math.abs((yearMoth+citycode).hashCode())%20;

return region+citycode+endtime;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

17计算机应用,计算机应用基础17129.ppt

计算机应用基础17129.ppt计算机应用基础课件 第一章 计算机基础知识 1946年第一台数字电子计算机ENIAC诞生在美国。 1、电子计算机发展四个阶段&#xff1a; 第一代特征&#xff1a;用电子馆作为主要电子元器件 第二代特征&#xff1a;以晶体管作为主要电子元器件 第三代特征&a…

linux mv 保持目录结构_(三)Linux系统目录结构

点击蓝字 关注我们Linux系统目录结构&#xff1a;所有的类Unix系统根分区下的文件系统都基本一致。分别介绍一下功能&#xff1a;/bin&#xff1a;所有常用的可执行的二进制文件&#xff0c;就是“命令”&#xff0c;这些命令是所有用户都可以使用的。(存放系统命令的目录&…

d3.js html显示图片,d3.js v4:如何在鼠标点击节点后显示图像

在使用d3.js时仍然相当缺乏经验&#xff0c;我碰到了一个障碍。 希望有人能帮助我。d3.js v4&#xff1a;如何在鼠标点击节点后显示图像我试图在鼠标单击图形中的节点时显示图片。 理想情况下&#xff0c;我想单击几个节点并显示图像。双击节点应该删除图像。点击背景将删除所有…

语言速算24点的小窍门_4秒钟1道题!12岁少年三夺24点大赛冠军

数学文化节上&#xff0c;参加大赛的孩子们。夺得24点大赛冠军的华跃麟。本报讯 (重庆晨报上游新闻记者 秦健)“哇&#xff0c;太厉害了。”“快快快&#xff0c;超过他们俩了&#xff01;”昨天下午&#xff0c;“第二届重庆数学文化节”在重庆市德普外国语学校体育活动中心举…

用计算机表白我不喜欢你了,隐藏式表白,表白不一定要用“我喜欢你”这几个字...

要知道女生都是喜欢浪漫的&#xff0c;浪漫不失为一种提升表白成功率的方式。但表白的时候&#xff0c;如果只是一束鲜花&#xff0c;一句简单“我喜欢你”&#xff0c;难免显得太过乏味&#xff0c;而且不够浪漫。那该怎么给表白添加一点新意和浪漫呢?下面&#xff0c;是小编…

总线制和多线制示意图_主机总线线 总线制和多线制示意图

消防主机总线不能上电是什么原因&#xff1f;一般回路线出现短路&#xff0c;开路&#xff0c;接地故障&#xff0c;还有回路卡损坏都会引起报总线故障的&#xff0c;排除方法&#xff1a;怀疑是短路故障引起的可用以下方法&#xff0c;在主机回路接线端把回路线的正负极线拆下…

有大学生双修计算机专业和数学专业的吗,南开大学再现学霸班

财务管理专业作为一个文理兼收的专业&#xff0c;系里鼓励学生建立复合的知识结构&#xff0c;培养学生多元的学习兴趣。在王永进、张晓农等多位教师的鼓励下&#xff0c;2014级财务管理专业的许多学生选择了双修和辅修其他专业。全班6个同学取得了数学双学位&#xff0c;两个同…

切片分析报告格式_社科论文写作101-APA数据分析结果报告格式

什么比写论文更惨&#xff1f;改论文&#xff01;&#xff01;特别是搞量化数据的&#xff0c;少个数据或报告格式不正确的话&#xff0c;重新搞数据和格式吧——又要打开spss&#xff0c;又要在网上看数据分析步骤&#xff0c;又要在熟悉的word界面花上一天。所以&#xff0c;…

计算机user用户的密码存储在,windows存放用户密码的文件

密码丢失的解决的办法提起Windows 2000密码丢失&#xff0c;确实是件令人头痛的事了&#xff0c;不管是自己不小心忘了密码也好&#xff0c;被别人恶意修改也好&#xff0c;一般都是重装系统&#xff0c;不但浪费时间&#xff0c;而且可能自己辛辛苦苦存储的资料也随之烟消云散…

如何关闭借呗订阅开通通知_支付宝花呗借呗隐藏规则,芝麻分600以上,花呗3.6万,借呗12万!...

阅读本文前&#xff0c;请您先点击上面的“蓝色字体”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注。 注&#xff1a;本文转载自网络,侵删经常遇到网友反馈&#xff0c;…

对外经贸大学计算机应用基础,对外经贸大学计算机应用基础试题.doc

对外经贸大学计算机应用基础试题1、计算机中数据的表示形式是A)八进制 B)十进制 C)二进制 D)十六进制2、硬盘工作时应非凡注重避免A)噪声 B)震动 C)潮湿 D)日光3、针式打印机术语中&#xff0c;24针是指A)24x24点阵 B)信号线插头有24针 C)打印头内有24x24根针 D)打印头内有24根…

骁龙660是32位还是64位_微软公布v2004最低处理器要求,放弃32位系统,你的CPU还能支持吗?...

最近关于win10 20H1&#xff08;win10更新五月版&#xff09;的消息铺天盖地席卷而来&#xff0c;据说只有开发者用户可以先行在MSDN订阅网站下载该版本的ISO镜像文件&#xff0c;对于主流消费者而言&#xff0c;预计要再煎熬等到28日。而且微软也提前更新支持文档&#xff0c;…

大专计算机应用技术答辩,计算机应用技术专业硕士答辩.ppt

计算机应用技术专业硕士答辩* 基于密度和中心点的分布式数据流聚类算法的研究 姓 名&#xff1a;侯杰 学 号&#xff1a;Y专 业&#xff1a;计算机应用技术 研究方向&#xff1a;数据挖掘与分布式计算 指导老师&#xff1a;高宏宾 报告内容 主要研究内容 计划步骤 对聚类算法的…

xlsxwriter写行合并_使用实现XlsxWriter创建Excel文件并编辑

之前操作Excel使用过其他的方式&#xff0c;针对Excel的写入来说&#xff0c;使用过xlwt模块&#xff0c;也直接使用过win32com接口。如果说哪个最能够发挥Excel的威力&#xff0c;那么肯定是win32com接口实现的方式&#xff0c;然而这种方式需要的是Office软件支持。至于xlwt&…

中石油《计算机应用基础》,2017中国石油大学《计算机应用基础》第3阶段在线作业.doc...

2017中国石油大学《计算机应用基础》第3阶段在线作业.doc (23页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;19.90 积分&#xfeff;窗体顶端1(2.0分)在Excel2010的工作表中&#xff0c;假定C3:C8区…

centos7重装python_CentOS7重装yum和python

卸载现有的Python和Yum1、删除现有Python##强制删除已安装程序及其关联rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps##删除所有残余文件 ##xargs&#xff0c;允许你对输出执行其他某些命令whereis python |xargs rm -frv##验证删除&#xff0c;返回无结果whereis …

html标记的索引,基于HTML标记分析及中文切词的网页索引研究与实现

摘要&#xff1a;本文深入研究了HTML标记对网页内容的修饰作用,并对大量网页的结构进行了分析,通过对比各种中文文档的索引和加权策略以及中文切词,英文Stemming操作等算法,设计和实现了基于HTML标记的网页分析和加权策略与算法,完善了基于词典的切词算法. 为了合理地实现对网页…

tl494c封装区别_TL494参数,功能介绍,TL494应用电路图,封装,管脚及TL494 PDF中文资料手册...

TL494中文资料功能介紹 中文 :功能介紹 英文 : Voltage mode PWM control circuit.品牌 : Contek封装 :引脚 :功能介紹 中文 :功能介紹 英文 : SMPS Controller品牌 : Fairchild封装 :引脚 :功能介紹 中文 :功能介紹 英文 : SWITCHMODE PULSE WIDTH MODULATION CONTROL CIRCUIT…

计算机软件应用员,济宁计算机办公应用软件操作员

济宁计算机办公应用软件操作员&#xff1f;信息化是当今社会发展的风向标,对每一个工作岗位来说,信息环境下办公软件的有效使用已成为岗位效率提升的重要内驱力。事实上,这种内驱力的大小主要是由软件使用过程的技巧化决定的,技巧化的实现主要体现在表象化阶段、操作化阶段、应…

tableau三轴合并_举个栗子!Tableau技巧(34):同一张图表如何呈现多个度量

Tableau用户&#xff1a;怎样把条形状和折线图放在同一个图表里&#xff1f;阿达&#xff1a;你想在同一个工作表里放入两个维度吗&#xff1f;Tableau用户&#xff1a;是的&#xff0c;有这样的栗子吗&#xff1f;的确&#xff0c;在我们的日常数据分析工作中&#xff0c;常常…