2

我正在使用以下查询从我的 Snowflake 数据库中检索查询历史记录。

    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())) 

奇怪的是,如果我正在使用的仓库(大小:XS)在一段时间不活动后被暂停,下次我尝试检索查询历史时——仓库暂停之前的历史记录就消失了。

我找不到任何文件来解释这一点。

任何人遇到这个问题或相关文档可以解释这一点?

谢谢!

4

2 回答 2

2

我无法准确解释您正在运行的信息模式查询的限制(其中一些只返回 10,000 行或像您说的那样,一旦仓库关闭),但它是对实际查询历史的有限视图。您可以将snowflake数据库用于所有查询历史记录。

这是一张巨大的桌子,所以一定要在上面放上过滤器。这是一个访问它的示例查询:

USE DATABASE snowflake;
USE SCHEMA account_usage;

SELECT *
FROM query_history
WHERE start_time BETWEEN '2020-01-01 00:00' AND '2020-01-03 00:00'
  AND DATABASE_NAME = 'DATABASE_NAME'
  AND USER_NAME = 'USERNAME'
ORDER BY START_TIME DESC;
于 2020-03-20T18:34:39.930 回答
0

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 点,再次按预期返回记录。

于 2020-03-22T21:01:04.947 回答