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

我们有时候做分析或者报表的时候,会遇到这样的问题:
我们想看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

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


查询结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容