我们有时候做分析或者报表的时候,会遇到这样的问题:
我们想看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
最后的结果大概是这个样子:
查询结果
网友评论