zoukankan      html  css  js  c++  java
  • Week08_day01 (Hive实现按照指定格式输出每七天的消费平均数)

    Hive实现按照指定格式输出每七天的消费平均数

    数据准备

    2018/6/1,10
    2018/6/2,11
    2018/6/3,11
    2018/6/4,12
    2018/6/5,14
    2018/6/6,15
    2018/6/7,13
    2018/6/8,37
    2018/6/9,18
    2018/6/10,19
    2018/6/11,10
    2018/6/12,11
    2018/6/13,11
    2018/6/14,12
    2018/6/15,14
    2018/6/16,15
    2018/6/17,13
    2018/6/18,17
    2018/6/19,18
    2018/6/20,19
    2018/6/21,20
    2018/6/22,21
    2018/6/23,21
    2018/6/24,22
    2018/6/25,24
    2018/6/26,25
    2018/6/27,23
    2018/6/28,27
    2018/6/29,28
    2018/6/30,29
    2018/7/1,40
    2018/7/2,41
    2018/7/3,41
    2018/7/4,42
    2018/7/5,44
    2018/7/6,45
    2018/7/7,43
    2018/7/8,47
    2018/7/9,48
    2018/7/10,49
    2018/7/11,50
    2018/7/12,51
    2018/7/13,51
    2018/7/14,52
    2018/7/15,54
    2018/7/16,55
    2018/7/17,53
    2018/7/18,57
    2018/7/19,58
    2018/7/20,59
    2018/7/21,30
    2018/7/22,31
    2018/7/23,31
    2018/7/24,32
    2018/7/25,34
    2018/7/26,35
    2018/7/27,33
    2018/7/28,37
    2018/7/29,38
    2018/7/30,39
    2018/7/31,70
    2018/8/1,71
    2018/8/2,71
    2018/8/3,72
    2018/8/4,74
    2018/8/5,75
    2018/8/6,73
    2018/8/7,77
    2018/8/8,78
    2018/8/9,79
    2018/8/10,80
    2018/8/11,81
    2018/8/12,81
    View Code

    创建表

    create table f
    (
    date_time  string,
    cost string
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

    使用本地加载数据 

      load data local inpath '文件所在的绝对路径' into table f;

    查看内容

    需求: 求每七天的消费平均数 ,要求输出格式如下:

    第一步,先将日期分割

    select split(date_time,'/') from f;

    第二步,将日期使用‘-’ 进行连接,使用到 concat_ws() 函数

    select concat_ws('-',split(date_time,'/')) from f;

    第三步,我们要实现这个要求,主要思想就是怎么去实现统一分组,以及日期怎么去变化,先将每个日期进行减去第一天的日期。 datediff()

    select datediff(concat_ws('-',split(date_time,'/')),'2018-6-1') from f;

    第四步,在上面的基础之上进行除以7,因为hive有小数点,我们 floor再向下取整,这样我们发现,日期现在变的一致了。

    select floor(datediff(concat_ws('-',split(date_time,'/')),'2018-6-1')/7)*7,cost from f;

    第五步,现在需要思考的就是,怎么将其转化位日期,而且还要有分组之前的现象出现,我们使用第一天的日期加上当前的日期*7就是一样的了。

    select date_add('2018-6-1',cast(floor(datediff(concat_ws('-',split(date_time,'/')),'2018-6-1')/7)*7 as int)),cost from f;

    第六步,我们距离要求输出越来越近,现在需要考虑的就是怎么获取7天后的日期,以及怎么输出指定格式。很简单,后面7天的日期在当前日期前面加6就是的了,在使用函数 concat() 进行拼接,当然也可以使用concat_ws() 因为我这里就两个量进行拼接,可以用concat()   

    select concat(date_add('2018-6-1',cast(floor(datediff(concat_ws('-',split(date_time,'/')),'2018-6-1')/7)*7 as int)),'~',date_add('2018-6-1',cast(floor(datediff(concat_ws('-',split(date_time,'/')),'2018-6-1')/7)*7+6 as int))) as dtime,cost from f;

    第七步,到这里应该就很熟悉了,我们现在就是要做的就是对这个结果进行group by分组,以及avg()求平均值了

    select w.dtime,avg(w.cost) from (select concat(date_add('2018-6-1',cast(floor(datediff(concat_ws('-',split(date_time,'/')),'2018-6-1')/7)*7 as int)),'~', date_add('2018-6-1',cast(floor(datediff(concat_ws('-',split(date_time,'/')),'2018-6-1')/7)*7+6 as int))) as dtime,cost from f) w group by w.dtime;select w.dtime,avg(w.cost) from (select concat(date_add('2018-6-1',cast(floor(datediff(concat_ws('-',split(date_time,'/')),'2018-6-1')/7)*

    select w.dtime,avg(w.cost) from (select concat(date_add('2018-6-1',cast(floor(datediff(concat_ws('-',split(date_time,'/')),'2018-6-1')/7)*7 as int)),'~', date_add('2018-6-1',cast(floor(datediff(concat_ws('-',split(date_time,'/')),'2018-6-1')/7)*7+6 as int))) as dtime,cost from f) w group by w.dtime;

    第八步,我们将小数点保留至后两位,使用函数round()

    select w.dtime,round(avg(w.cost),2) from (select concat(date_add('2018-6-1',cast(floor(datediff(concat_ws('-',split(date_time,'/')),'2018-6-1')/7)*7 as int)),'~', date_add('2018-6-1',cast(floor(datediff(concat_ws('-',split(date_time,'/')),'2018-6-1')/7)*7+6 as int))) as dtime,cost from f) w group by w.dtime;

    最终结果:

  • 相关阅读:
    自定义异常处理
    遍历目录
    快速排序
    Map<String,String>转换json字符串
    Sublime Text 3破解
    替换字符串
    Moss2007迁移步骤
    Sharepoint 2010 定时提醒
    Sharepoint 2010 显示详细错误
    Sharepoint 2010 安装完Micrsoft sharepoint 2010 service pack 1后网站主页报错
  • 原文地址:https://www.cnblogs.com/wyh-study/p/12088143.html
Copyright © 2011-2022 走看看