国际业务跨越多多个国家或者地区的时候,业务数据也会随着时区的不同产生不统一的发生时间,这就会给数据抽取,加载,清洗,统计等多个环节带来很多问题。下面文章介绍一种较为简单的数据处理方案。
单一时区的数据
业务表需要字段 | |
城市编号 | 业务时间 |
DLD | 2021/1/1 12:13 |
业务表中只需要有业务发生时间即可,数据的ETL和数据的统计分析基于业务发生的事件就能完成。
对于跨越多个时区的数据
业务表需要字段 | ||||
城市编号 | 时区 | 业务时间 | 业务日期 | UTC时间 |
DLD | -5 | 2021/1/1 12:13 | 20210101 | 2021/1/1 7:13 |
业务表中加入时区,业务日期和UTC时间,另外新建一张时区维度表
时区维度表 | |||||
日期 | 城市编号 | 时区 | 是否夏时令 | 是否冬时令 | 偏移量 |
20210101 | DLD | -5 | 1 | 0 | -4 |
日期月业务表中的业务日期对应,城市编号对应业务表中城市编号。同时考虑有些国家和地区采用夏时令和冬时令的情况,结合时区、UTC时间、夏时令和冬时令计算出与UTC时间的差值作为时间偏移量。
在进行数据统计的时候,业务表和维度表通过业务日期和城市编号做连接,把UTC时间加上偏移量作为业务的发生时间。后续就可以把数据当作单一时区的数据处理。
关于调度问题:
时区不一致,要重新设置时区
查看并修改 本地时区
查看
more /etc/localtime
备份:
cp /etc/localtime /etc/localtime.bak
设置本地时区
设置本地时区为 Shanghai
cp -pf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改 Contab 时区
vim /etc/crontab
添加变量 CRON_TZ=Asia/Shanghai