【hive】时间段为五分钟的统计

问题内容

  • 今天遇到了一个需求,需求就是时间段为5分钟的统计.有数据的时间戳.对成交单量进行统计.

想法思路

  • 因为数据有时间戳,可以通过from_unixtime()来获取具体的时间.
  • 有了具体的时间,就可以用minute()函数获取对应数据所在的分钟.(minute()获取到的分钟为字符串,需要进行类型转换cast())
  • 那么怎么通过获取到的minute来进行分组呢?
    • 想法 00 - 05 应该分到一组, 05 - 10 应该分到第二组,依次类推.
    • 用minute 整除 5 的话, 00 - 05 整除 5 都为 0, 05 - 10 整除 5 都为1,依次类推
    • 这样就可以把每5分钟的数据都分到了一组.
    • 注意,hive中的 minute / 5 的话并能整除,所以需要函数向下取整,用floor()函数来完成.
  • 虽然把分钟分开了,但是并不能仅仅按照分钟来分组,这样就把每个小时的相同分组分成一组,所以每个小时之间也是一个聚合维度.

具体步骤

  • 先通过时间戳取到数据对应的小时和分钟.

    • 小时 from_unixtime(time,‘yyyyMMdd HH‘)
    • 分钟 minute(from_unixtime(time))
  • 对分钟进行整除5来完成分段.(同时需要对获取到的minute进行类型转换)
    • floor(cast(minute(from_unixtime(time)) as int) / 5)
    • 如果要是变时间段的话,分钟为单位,除以相应的时间段就行.10分钟就整除10,15分钟就整除15.
  • 对小时和(分钟整除的结果)进行分组进行统计.

示例SQL

select
    case
    when sort in (0,1) then concat(substring(time,10,11),‘:0‘,sort*5)
    else concat(substring(time,10,11),‘:‘,sort*5)
    end, --对时间格式进程处理,把小时和分钟合并 例如,hour =2018111 00,sort = 1 -> 00:05
    num --统计的字段
from(
    select time,sort,count(distinct purchase_id) as num --统计
    from
    (
        select purchase_id,--需要统计的字段
            from_unixtime(add_time,‘yyyyMMdd HH‘) as time, --取小时
            floor(cast(minute(from_unixtime(add_time)) as int) / 5 ) as sort --按分钟归类
        from kkgoo.kk_order_association
        where from_unixtime(add_time,‘yyyyMMdd‘) = 20181111 --筛选条件
        and status not in (‘unpayed‘, ‘close‘, ‘timeout_pay‘, ‘timeout_lock‘)
    ) t
    group by 1,2 --对小时和分钟整除结果进行分组
) t;

原文地址:https://www.cnblogs.com/zzhangyuhang/p/9955554.html

时间: 2024-09-28 11:45:04

【hive】时间段为五分钟的统计的相关文章

日志分析   取出访问最多的IP,URL,以及五分钟内的访问流量

日志分析! 对最近五分钟的日志进行分析,取出访问最多的IP,URL,以及五分钟内的访问流量 #!/bin/sh name=`cat /etc/salt/minion | grep "^id" | awk '{print $2}'` ipaddr=`/sbin/ifconfig | grep "inet addr" | egrep -v "10\.|127\." | awk  -F'[: ]+' '{print $4}'` #LogPath='/u

一个睡五分钟等于六个钟头的方法

一个睡五分钟等于六个钟头的方法  睡觉的诀窍    所以,根据医学和我的体验.观察,一个人真正睡着觉最多只有两个钟头,其余都是浪费时间,躺在枕头上做梦,没有哪个人不做梦.至于醒来觉得自己没有做梦,那是因为他忘记了.    通常一个人睡两个钟头就够了,为什么有人要睡七.八个钟头?那是你赖床躺在枕头上休息的习惯养成的,并非我们需要那么久的睡眠时间,尤其打坐做功夫的人晓得,正午只要闭眼真正睡着三分钟,等于睡两个钟头,不过要对好正午的时间.夜晚则要在正子时睡着,五分钟等于六个钟头.    就这个时间的学

当日志文件中的时间与主机时间不同步时,怎么监控每隔五分钟检测一次日志文件是否出自按某个关键字?

今有需求:需要监控每隔五分钟检测一次日志文件是否出自按某个关键字.利用过滤全部的日志信息 虽然可以过滤出来关键字告警,但是修复后,依然还是会报警,存在局限性,所以需要使用以下办法来实现需求. 本想循环获取5分钟内的时间戳,然后从日志文件中grep这个时间端的信息,然后再获取关键字,但是通过查看日志文件发现时间戳与主机时间不同步,所以,这种方法不可取.那么怎么获取最近五分钟的日志信息,再过滤关键字呢?思索了很久,又有了新思路.将现在的文件日志重定向到一个新的文件里面 cat /var/log/xx

01. SpringCloud实战项目-五分钟搞懂分布式基础概念

SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. PassJava 是一款Java面试刷题的开源系统,可以用零碎时间利用小程序查看常见面试题,夯实Java基础. PassJava 项目可以教会你如何搭建SpringBoot项目,Spring Cloud项目 采用流行的技术,如 SpringBoot.MyBatis.Redis. MySql. Mon

算法笔记_105:蓝桥杯练习 算法提高 上帝造题五分钟(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 第一分钟,上帝说:要有题.于是就有了L,Y,M,C 第二分钟,LYC说:要有向量.于是就有了长度为n写满随机整数的向量 第三分钟,YUHCH说:要有查询.于是就有了Q个查询,查询向量的一段区间内元素的最小值 第四分钟,MZC说:要有限.于是就有了数据范围 第五分钟,CS说:要有做题的.说完众神一哄而散,留你来收拾此题 输入格式 第一行两个正整数n和Q,表示向量长度和查询个数 接下来一行n个整数,依次对应向量中元素:a[0],a[1],

Org-mode五分钟教程ZZZ

Table of Contents 1 源起 2 简介 2.1 获取 org-mode 2.2 安装 3 基础用法 3.1 创建一个新文件 3.2 简单的任务列表 3.3 使用标题组织一篇文章 3.4 展开段落 3.5 使用链接 3.6 浏览文章 3.7 给任务添加说明 4 高级功能简述 4.1 设置 4.2 全局 TODO 列表 4.3 计划任务和日程表 5 再会 6 后记 1 源起 最近在学习 Emacs 的一些高级用法,在学习到了 org-mode,看到了官方网站上的这篇 David O'

五分钟读懂UML类图

平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类名.属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和email这3个属性,以及modifyInfo()方法. 那么属性/方法名称前加的加号和减号是什么意思呢?它们表示了这个属性或方法的可见性,UML类图中表示可见性的符

Git五分钟教程

许多人认为Git太混乱或是复杂的版本控制系统,这篇文章是面向一些人想快速上手使用Git, 对于大多数基本需求这篇文章涵盖了使用的70%至90% 入门 使用Git前 需要先建立一个仓库(repository).你可以使用一个已经存在的目录作为Git仓库或创建一个空目录 使用您当前目录作为Git仓库,我们只需使它初始化 git init 使用我们指定目录作为Git仓库 git init newrepo 从现在开始,我们将假设你在Git仓库根目录下,除非另有说明 添加新文件 我们有一个仓库,但什么也没

设计模式Adapter模式的五分钟

五分钟一个设计模式.来形容叙述的设计模式的最简单方法.看到许多其他设计模式,请点击五分钟一个设计模式系列 http://blog.csdn.net/daguanjia11/article/category/3259443 认识适配器模式 适配器模式的定义是:将一个类的接口转换成client希望的另外一个接口. 适配器模式使得原本因为接口不兼容而不能一起工作的那些类能够一起工作. 适配器模式的主要功能是转换接口,目的是复用已有功能.而不是实现新接口,适用于功能实现了但接口不兼容的场合. 适配器组合