如何获取雪花中表的最后访问时间戳?

Posted

技术标签:

【中文标题】如何获取雪花中表的最后访问时间戳?【英文标题】:How do I get the last accessed time stamp for the table in the snowflake? 【发布时间】:2020-03-19 12:55:08 【问题描述】:

我想获取雪花中表格的最后访问时间戳

【问题讨论】:

这能回答你的问题吗? Is there a way to know when a table was last accessed in snowflake 【参考方案1】:

并不总是理想的,但为一次性问题找到此问题的一种快速方法是使用 QUERY_HISTORY

SELECT START_TIME, * 
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY()) 
WHERE QUERY_TEXT LIKE '%MYSCHEMA.MYTABLE%';

更新:查询以专门获取最近的查询时间。必须自己过滤掉 QUERY_HISTORY 查询。这并不是特别快,并且确实要求运行它的角色可以访问所有相关历史记录。

SELECT MAX(START_TIME)
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY()) 
WHERE QUERY_TEXT ILIKE '%CONFIG.PIPELINE_LOG%'
AND NOT QUERY_TEXT ILIKE '%INFORMATION_SCHEMA.QUERY_HISTORY%';

【讨论】:

这个查询给出了完整的查询历史。但是我需要我给出的特定表名,然后我需要它最后一次访问时间戳的时间。 使用 @David Garrison 提供给您的相同基本查询,但只需将其更改为 SELECT MAX(start_time) SELECT MAX(start_time) 出现错误,您能否添加完整的查询。 但是,上面的查询显示了查询历史,但我需要特定表的最后访问时间戳(当我在查询中给出表的名称时,最后访问的详细信息和时间)而不是查询历史。 更新后的查询只返回最近一次查询的时间,而不是完整的日志。【参考方案2】:

希望这种方法会有所帮助

重要提示: 这不是一个非常合适的方法,因为用户必须具有 AccountAdmin 访问权限,才能在 snowflake.account_usage 架构上运行查询,并且查询将有一点延迟,因为它是 account_usage 架构的一部分。如果数据量太大,也会产生WH成本

select * from "SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY" 
where 
    query_text like '%STORE_SALES%' and 
    query_type = 'SELECT'
    order by START_TIME DESC
    LIMIT 1

或者,如果要求仅限于过去 14 天的历史记录,请使用历史记录选项卡,该选项卡使用简单的过滤子句无需花费任何成本。

【讨论】:

【参考方案3】:

这是一个较老的问题,但我正在回答这个问题,因为 Snowflake 添加了一项新功能来跟踪跨越 1 年的上次访问。由于未从创建旧对象时跟踪此信息,因此您只会看到自跟踪开始以来的访问历史记录。

现在“SNOWFLAKE”.“ACCOUNT_USAGE”.“ACCESS_HISTORY”中有一个视图。您可以通过展平base_objects_accessed 数组来查看如何查询它:

select * from "SNOWFLAKE"."ACCOUNT_USAGE"."ACCESS_HISTORY",
 LATERAL FLATTEN(base_objects_accessed) limit 100;

【讨论】:

以上是关于如何获取雪花中表的最后访问时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法知道上次在雪花中访问表的时间

如何使用 Entity Framework 6 从 .Net 应用程序访问雪花数据库

如何获取目录的属性,例如上次访问和上次修改

如何访问R中表中的单个元素

如何在雪花中将时间戳转换为日期

将数据从雪花卸载到 s3 时,如何将日期时间戳添加到 zip 文件?