美文网首页
如何在hive里创建一个超级日期维表

如何在hive里创建一个超级日期维表

作者: wangminglei3 | 来源:发表于2019-02-20 18:49 被阅读0次

    我们有时候做分析或者报表的时候,会遇到这样的问题:
    我们想看1月1日至1月31日每一天的某一指标的变化趋势,但是,有可能在1月的某一天,这一指标是0 ,那么在sql里计算时,这一天的日期就不会出现。这时候如果想要每一天的日期不出现缺失,就要配合超级日期表使用。

    首先,可以创建一个表,用\t分隔

    drop table if exists tmp.tmp_super_date_wml;
    CREATE TABLE `tmp.tmp_super_date_wml`(
      `date` string, 
      `week` bigint, 
      `week_cn` string
      )row format delimited fields terminated by '\t' stored as textfile;
    
    

    接下来是要生成一个文件,文件内容就是各个不同维度的时间

    #!/bin/bash
    day="2017-01-01"  ## 时间从2017年1月1日开始
    
    for i in $(seq 0 7) ##用循环计算的方式
    do
    ymd_1=`date -d"+$i day $day" +%Y-%m-%d`
    
    hive -e"
    insert into table tmp.tmp_super_date_wml(date,week,week_cn)
    select 
    '${ymd_1}' as stat_date
    ,pmod(datediff('${ymd_1}', '2012-01-01'), 7) as week
    ,case when pmod(datediff('${ymd_1}', '2012-01-01'), 7) = 0 then '星期日' 
        when pmod(datediff('${ymd_1}', '2012-01-01'), 7) = 1 then '星期一' 
        when pmod(datediff('${ymd_1}', '2012-01-01'), 7) = 2 then '星期二' 
        when pmod(datediff('${ymd_1}', '2012-01-01'), 7) = 3 then '星期三' 
        when pmod(datediff('${ymd_1}', '2012-01-01'), 7) = 4 then '星期四' 
        when pmod(datediff('${ymd_1}', '2012-01-01'), 7) = 5 then '星期五' 
        when pmod(datediff('${ymd_1}', '2012-01-01'), 7) = 6 then '星期六' 
        else pmod(datediff('${ymd_1}', '2012-01-01'), 7) end as week_cn
    ,
    
    ">>date_detail
    done
    

    最后,导入数据:

      LOAD DATA LOCAL inpath '/data0/data1/wangminglei/bbb' into table tmp.tmp_super_date_wml
    

    最后的结果大概是这个样子:


    查询结果

    相关文章

      网友评论

          本文标题:如何在hive里创建一个超级日期维表

          本文链接:https://www.haomeiwen.com/subject/llckyqtx.html