如何从雪花查询历史表中获取最后一次查询的记录



在snowflake中,我试图获得具有最新时间戳的最后调用的存储过程我的代码选择最新的存储过程,但它获得每个被调用的存储过程的最新时间戳我做错了什么?下面是我的代码

SELECT * FROM TABLE(INFORMATION_SCHEMA.query_history_by_session())
WHERE (end_time) IN 
(SELECT MAX(end_time) 
FROM TABLE(INFORMATION_SCHEMA.query_history_by_session()) 
WHERE UPPER(QUERY_TEXT) LIKE 'CALL%' 
AND UPPER(QUERY_TEXT) <> 'CALL "DB"."TK".GET_EXECUTION_ATTRIBUTES();')
ORDER BY END_TIME DESC;

获取ORDER BY ... DESC LIMIT 1的最新记录:

SELECT *
FROM TABLE(INFORMATION_SCHEMA.query_history_by_session()) 
WHERE QUERY_TEXT ILIKE 'CALL%' 
AND QUERY_TEXT NOT ILIKE 'CALL "DB"."TK".GET_EXECUTION_ATTRIBUTES();'
ORDER BY END_TIME DESC
LIMIT 1;

对于不区分大小写的比较,建议使用ILIKE


但是它获取每个名为的存储过程的最新时间戳

假设:选择了不正确的范围(即;, end_time IN(…)马克斯(end_time)…)。

当然,建议对所有列使用显式混叠:

SELECT o.*
FROM TABLE(INFORMATION_SCHEMA.query_history_by_session()) AS o
WHERE (o.end_time) IN 
(SELECT MAX(i.end_time) 
FROM TABLE(INFORMATION_SCHEMA.query_history_by_session()) AS i
WHERE UPPER(i.QUERY_TEXT) LIKE 'CALL%' 
AND UPPER(i.QUERY_TEXT) <> 'CALL "DB"."TK".GET_EXECUTION_ATTRIBUTES();')
ORDER BY o.END_TIME DESC;

注意,query_history%函数在默认情况下返回100个查询,您可以使用该属性扩展它RESULT_LIMIT =比;全国矿工工会缩小时间间隔END_TIME_RANGE_START =比;constant_exprEND_TIME_RANGE_END =比;constant_expr

更多信息:https://docs.snowflake.com/en/sql-reference/functions/query_history.html

如果这还不够,也许值得询问一下account_usage。query_history观点:

USE ROLE ACCOUNTADMIN;
SELECT *
FROM snowflake.account_usage.query_history
WHERE query_text ilike 'call%'
ORDER BY END_TIME DESC
LIMIT 100;

更多信息:https://docs.snowflake.com/en/sql-reference/account-usage/query_history.html

但是要小心,视图的延迟可能高达45分钟。

最新更新