2017-05-17 52 views
0

我想通过设置一个查询来分析Redshift中每个表的最后一次写入操作,从而监视数据是否过时。每个表都有一个created_at领域,我可以通过pg_table_def拉所有的表名,但没有办法建立动态SQL红移(如SELECT max(created_at) FROM {table})从红移表获取最新更新时间戳

我也通过其他管理表和视图潜水,但没有我敢肯定,这是一个解决的问题,但任何人有一个小费,他们是如何把它放在一起?

+0

您需要编写一个应用程序来查询表名列表,然后遍历它们并为每个表创建一个查询。它只是Python中的几行代码。 –

+0

你需要动态地做到这一点吗?如果它是固定的表格列表,你可以在一个视图中合并多个选择语句。 – Nathan

+0

@Nathan现在是固定的,但我们的团队无疑将来会添加/删除表格,我宁愿不更新该列表。 – ScottieB

回答

0

我有一个类似的要求更新每个表中的最后访问时间使用LAST_UPDATED列下面是我如何完成它:

UPDATE UPDATION_RECORD_TABLE SET LAST_MODIFIED = (SELECT MAX(LAST_UPDATED) FROM %s) WHERE TABLE_NAME = '%s'; 

这里,UPDATION_RECORD_TABLE是一个有两列的表格,表格的名称和最后更新日期。当使用Python代码(使用pyscopg2)执行上面的SQL查询,值%s可以用表名替换,通过表的列表,这是我取已经使用SELECT table_name FROM information_schema.tables

希望这有助于循环之后。