1:您的问题指出,在一段时间不活动后,没有具体说明什么是不活动时间。
“在一段时间不活动之后,下次我尝试检索查询历史记录时,仓库暂停之前的历史记录就消失了。”
如果超过 7 天,则可以从 account_usage 表中找到数据。下面是 INFORMATION_SCHEMA 和 ACCOUNT_USAGE 的区别链接。
https://docs.snowflake.com/en/sql-reference/account-usage.html#differences-between-account-usage-and-information-schema
2:您的查询未在您的查询中指定 USER_NAME 或 WAHREHOUSE_NAME,因此可能是在您的查询输出之前,在暂停仓库之前可能已经超过了您的谓词中的 4 小时。如果您可以增加时间段并检查行为是否仍然存在。
3:通常不建议查询 INFORMATION_SCHEMA 来获取查询历史记录,除非您的应用程序需要没有任何延迟的数据。如果可能,使用 ACCOUNT_USAGE 表来获取查询历史信息。
这就是我所做的。
1:创建XS仓库
2:将 auto_suspend 设置为 5 分钟
3:运行几个查询
4:运行您的查询(未指定用户名或仓库名),这意味着您正在搜索所有用户的历史记录。
SELECT "QUERY_TEXT", "DATABASE_NAME", "SCHEMA_NAME", "QUERY_TYPE", "USER_NAME", "ROLE_NAME", "EXECUTION_STATUS", "ERROR_CODE", "START_TIME", "END_TIME", "TOTAL_ELAPSED_TIME", "BYTES_SCANNED", "ROWS_PRODUCED"
FROM table(MY_DATABASE.information_schema.query_history(end_time_range_start=>dateadd(HOUR, -4, current_timestamp()), current_timestamp()))
5:返回了 100 条记录的输出。
6:使用额外的 where 子句来检查我的用户的数据,该用户在 Warehouse 的 auto_suspend 之前运行了很少的查询并且它返回了很少的记录。
SELECT "QUERY_TEXT", "DATABASE_NAME", "SCHEMA_NAME", "QUERY_TYPE", "USER_NAME", "ROLE_NAME", "EXECUTION_STATUS", "ERROR_CODE", "START_TIME", "END_TIME", "TOTAL_ELAPSED_TIME", "BYTES_SCANNED", "ROWS_PRODUCED"
FROM table(MY_DATABASE.information_schema.query_history(end_time_range_start=>dateadd(HOUR, -4, current_timestamp()), current_timestamp())) WHERE USER_NAME = 'ADITYA'
7:等了10分钟,我的仓库就被auto_suspended了。
8:重复第 5 点和第 6 点,再次按预期返回记录。