Redshift 表 - 查找表上查询的最后日期

Posted

技术标签:

【中文标题】Redshift 表 - 查找表上查询的最后日期【英文标题】:Redshift Table - Find Last Date of Query on a Table 【发布时间】:2017-07-31 16:30:25 【问题描述】:

我正在尝试清理我的小型数据库并尝试查看上次实际查询某些表的时间,但似乎找不到任何有关如何执行此操作的文档。我可以获得架构中所有表的列表和大小,但在轮询我的用户之前无法确定哪些表可能是陈旧的。

有没有人知道在 redshift 中获取表被使用/查询的最后日期的方法?

select
    schema,  
    "table",
     size as GB
from svv_table_info
    where schema = 'measure' or schema = 'mphd' or schema = 'offer'
order by schema asc;

【问题讨论】:

【参考方案1】:

您可以在stl_scan 中查看上次扫描表的时间。几乎所有的选择查询都会扫描。以下内容来自:https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_extended_table_info.sql 正如您所指出的,历史记录仅在有限的时间内保存。

SELECT tbl,
       MAX(endtime) last_scan,
       Nvl(COUNT(DISTINCT query || LPAD(segment,3,'0')),0) num_scans
FROM stl_scan s
WHERE s.userid > 1
AND   s.tbl IN (SELECT oid FROM tbl_ids)
GROUP BY tbl

【讨论】:

【参考方案2】:

您很可能必须解析 STL_QUERYTEXT 中的条目,它存储 SQL 查询。

解析STL_EXPLAIN 可能更容易。

这两个表都可以连接回STL_QUERY 以获得执行查询的时间。

【讨论】:

但是 STL 表只保存 2-5 天的历史,所以这只会告诉你它是否最近被查询过。您可能需要开始将 STL 表卸载到 S3 文件中(Amazon 推荐的方法),然后将它们加载到您自己的查询历史记录表中并运行一段时间以收集必要的数据量来确定哪些表没有被查询你的数据库。 @Nathan 你有来自亚马逊的资源,他们推荐这种方法吗?谢谢! 我指的是(抱歉,我应该更具体)启用数据库审计日志,它将查询活动写入 S3。要分析这些日志,您可能需要将日志读回 Redshift,或在它们之上创建一个 Spectrum 表(或使用其他工具)。 docs.aws.amazon.com/redshift/latest/mgmt/db-auditing.html

以上是关于Redshift 表 - 查找表上查询的最后日期的主要内容,如果未能解决你的问题,请参考以下文章

在 athena 上工作时,数据在 redshift 外部表上显示为空

从 redshift 中删除外部表的所有分区

选择连接表上的最近日期

日期数学不会在 R 与 Redshift 中产生相同的结果

在 Redshift SQL 中查找指定日期之前的 Max(Date)

Redshift。用一个共同的列来查询所有的表格