Hive | Shell | 数据分区时间字符串的坑

null

前言:我有一个朋友嗷

哈哈哈,我有一个朋友,我有一个朋友嗷。

null

前年的七月二十五号,他当时在做这样一个需求“从 5 张 ODS 层数据表中根据年份与月份聚合出最近 12 个月的关系数据”的 DW 层 Hive | Shell 脚本,至于具体的 SQL 语句呢!

null

它今天不太方便出场,所以就只能请大家品鉴下处理时间的操作吧。

#!/bin/sh
current_day=`date +'%Y-%m-%d'`


no=0
while (($no!=12))
do
no=`expr $no + '1'`


year=`date -d "${current_day} -${no} month" +%Y`
month=`date -d "${current_day} -${no} month" +%m`
echo "year = '$year' month = '$month'"
done
null

起源:一个 Hive 分区的坑

后来啊!我这位朋友批了扑棱的跑了大半天的数据。

null

哎!完事他去 Hive 控制台一瞅“数据呢?咋没上来呢?不对劲啊?”。

null

这顿查啊,Shell 脚本里外校验了好几遍,最后发现是 ODS 层的数据分区月份分区【1-9】月没有在前位补零,但我们看上边的脚本跑出来的时间月份的前位都是补零的。

null

好嘛,定了位了嘛不,这就好办了哈。既然前位补零了我们去掉不久好了嘛,请看如下代码。

#!/bin/sh
current_day=`date +'%Y-%m-%d'`


no=0
while (($no!=12))
do
no=`expr $no + '1'`


year=`date -d "${current_day} -${no} month" +%Y`
month=`date -d "${current_day} -${no} month" +%_m`
echo $year
echo $month
done
null

次生问题:一个时间字符串的坑

欢迎大家来到本文的最后一趴~

null

都写到这了,现在脚本总该好使了吧。惊喜总是来的那么及时,对对对,大家想的没错他的脚本又没有跑出数据!瞅瞅吧,啥情况一目了然了。

#!/bin/sh
current_day=`date +'%Y-%m-%d'`


no=0
while (($no!=12))
do
no=`expr $no + '1'`


year=`date -d "${current_day} -${no} month" +%Y`
month=`date -d "${current_day} -${no} month" +%_m`
echo "year = '$year' month = '$month' "
done
null

邪了门了,零没了,空格出来补位了,过分不!行吧,这也算看出原因了,下面让这位朋友把空格弄下去就 OK 了

null

*提肛,提肛,Linux | Shell 中的字符串替换

#!/bin/sh
str='a&b&c&'
# ${变量/查找/替换值}  替换第一个,特殊字符需转义
echo ${str/\&/=}
# ${变量//查找/替换值}  替换所有
echo ${str//\&/=
null

根据综上所示的内容,我的这位朋友也去修改了他的脚本,让咱们看下吧。

#!/bin/sh
current_day=`date +'%Y-%m-%d'`
no=0
while (($no!=12))
do
no=`expr $no + '1'`
year=`date -d "${current_day} -${no} month" +%Y`
month=`date -d "${current_day} -${no} month" +%_m`
# ${变量/查找}  没有替换内容为空
echo "year = '$year' month = '${month/ }' 
null

null

最终!恭喜我的这位终于跑通了他的脚本。感谢您的观看,Yes!

*文章为作者独立观点,不代表BOSS直聘立场。
本文系 BOSS直聘「有了」社区签约作者原创内容,未经账号授权,禁止随意转载。