保留期后自动进行红移截断/删除数据

Piq*_*qué 2 amazon-web-services node.js amazon-redshift

我有一个redshift表,它存储了大量数据。每个周末,我都会使用上周不再需要的数据手动使用Workbench TRUNCATE。我必须手动运行

DELETE FROM tableName WHERE created_date BETWEEN timeStamp1 AND timeStamp2;
Run Code Online (Sandbox Code Playgroud)

是否可以通过某种方式告诉该表,或者使用某种过期策略为我在每个星期日删除数据?
如果不是,是否有一种方法可以每7天自动执行一次删除过程?执行此操作的某种NodeJS外壳程序脚本或cron作业。

Joh*_*ein 5

不,没有内置功能可以在Amazon Redshift上定期运行命令。但是,您可以在连接到Redshift并运行命令的另一个系统上运行脚本。

例如,一个 cron调用psql连接到Redshift并执行命令的作业。这可以用单行脚本完成。

或者,您可以配置一个 AWS Lambda函数以连接到Redshift并执行命令。(您需要自己编写函数,但是有些库使此操作变得更容易。)然后,您将配置Amazon CloudWatch Events以按所需的时间表(例如,每周一次)触发Lambda函数。

常见的策略是在每个时间段(例如,一个月,但实际上是一周)将数据实际存储在单独的表中。然后,定义一个视图了多个表。要删除一周的数据,只需删除包含该周数据的表,为该周的数据创建一个新表,然后更新视图以指向新表而不是旧表。

顺便说说...

你的例子使用了DELETE命令,这是一样的TRUNCATE命令。

TRUNCATE从表中删除所有数据。这是一种完全清空表的有效方法。

DELETE对于删除表的一部分非常有用,但它只是将行标记为已删除。数据仍然占用磁盘空间。因此,建议您VACUUM在删除大量数据后使用该表。