我正在运行一个ETL脚本,该脚本将数据从mysql加载到teradata中。该脚本旨在选择晚于上次成功运行 bash 脚本的时间戳的所有行。由于我没有对 mysql 数据库的写入权限,因此我需要使用 bash 脚本存储上次运行时间戳。有没有一种简单的方法来存储成功运行的时间戳?我想我可以有一个文件,我会在脚本末尾触摸它,然后检查它的 mtime,或者只是从日志文件中解析出时间戳。有什么更好的策略可以做到这一点?
在脚本中,使用 set -e
1,以便在脚本中的任何命令失败时脚本立即退出。然后,在最后,使用 unix 时间戳date +%s
记录成功完成。
然后,可以使用 SELECT FROM_UNIXTIME(<YOUR TIMESTAMP>, <YOUR MYSQL DATE FORMAT>)
2 拉取比上次成功完成更新的行。
一个很大的警告:我不会仅仅依靠时间戳来解决这个问题。我会从具有一些时间重叠的 MySQL 中提取,并检查每次插入 teradata 的主键以避免插入重复项。要遵循此方法,只需从<YOUR TIMESTAMP>
中减去 1800 即可确保 30 分钟的重叠。