美文网首页
如何在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