我有一个redshift表,它存储了很多数据。每个周末我都会手动使用workbench截短上周不再需要的数据。
我必须手动运行

DELETE FROM tableName WHERE created_date BETWEEN timeStamp1 AND timeStamp2;

有没有可能有某种方法告诉表或有某种过期策略,为我删除每个星期天的数据?
如果没有,是否有办法每隔7天自动执行删除过程?nodejs中的某种shell脚本或cron作业可以实现这一点。

最佳答案

不,在amazon redshift上没有内置的定期运行命令的能力。但是,您可以在另一个连接到redshift的系统上运行脚本并运行该命令。
例如,调用cron连接到redshift并执行命令的psql作业。这可以在一行脚本中完成。
或者,可以配置aws lambda函数来连接到redshift并执行该命令。(您需要自己编写该函数,但有一些库可以简化这一过程。)然后,您将配置amazon cloudwatch事件,以便按所需的计划(例如每周一次)触发lambda函数。
一个常见的策略是在每个时间段(例如,一个月,但在您的情况下,这将是一周)将数据实际存储在单独的表中。然后,定义一个合并多个表的视图。要删除一周的数据,只需删除包含该周数据的表,为本周数据创建一个新表,然后更新视图以指向新表而不是旧表。
顺便说一句。。。
您的示例使用DELETE命令,这与TRUNCATE命令不同。
TRUNCATE从表中删除所有数据。完全清空表是一种有效的方法。
DELETE有助于删除表的一部分,但它只是将行标记为已删除。数据仍占用磁盘空间。因此,建议您在删除大量数据后VACUUM该表。

08-07 15:11
查看更多