我有一个红移表,它存储了大量数据。每个周末我都会去上周手动使用Workbench TRUNCATE我不再需要的数据。 我手动必须运行
DELETE FROM tableName WHERE created_date BETWEEN timeStamp1 AND timeStamp2;
是否可以通过某种方式告诉表格,或者有一些过期策略可以为我每周日删除数据?
如果没有,有没有办法每7天自动删除一次?执行此操作的nodeJS中的某种shell脚本或cron作业。
答案 0 :(得分:4)
不,没有内置的能力在Amazon Redshift上定期运行命令。但是,您可以在连接到Redshift的另一个系统上运行脚本并运行该命令。
例如,cron
作业调用psql
连接到Redshift并执行命令。这可以在一行脚本中完成。
或者,您可以配置 AWS Lambda函数以连接到Redshift并执行该命令。 (您需要自己编写该函数,但有一些库可以使这更容易。)然后,您将配置Amazon CloudWatch Events以按期望的时间表触发Lambda函数(例如,每周一次)。
一个常见的策略是实际在每个时间段将数据存储在单独的表中(例如,一个月,但在您的情况下,这将是一周)。然后,定义一个组合了多个表的视图。要删除一周的数据,只需删除包含该周数据的表,为本周的数据创建一个新表,然后更新视图以指向新表但不是旧表。
顺便说一句......
您的示例使用DELETE
命令,该命令 与TRUNCATE
命令相同。
TRUNCATE
从表中删除所有数据。这是完全清空表格的有效方法。
DELETE
适用于删除部分表,但它只是将行标记为已删除。数据仍然占用磁盘空间。因此,建议您在删除大量数据后VACUUM
表。