QUERY_HISTORY、QUERY_HISTORY_BY_*¶
您可使用 QUERY_HISTORY 表函数系列,查询各个维度上的 Snowflake 查询历史记录:
QUERY_HISTORY 返回指定时间范围内的查询。
QUERY_HISTORY_BY_SESSION 返回指定会话和时间范围内的查询。
QUERY_HISTORY_BY_USER 返回指定用户在指定时间范围内提交的查询。
QUERY_HISTORY_BY_WAREHOUSE 返回指定仓库在指定时间范围内执行的查询。
每个函数都针对沿指定维度的查询进行了优化。可以使用 SQL 谓词进一步筛选结果。
另请参阅:
QUERY_HISTORY 视图 (Account Usage) :doc:`/user-guide/ui-snowsight-activity`(Snowsight 仪表板)
语法¶
QUERY_HISTORY(
[ END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ]
[, INCLUDE_CLIENT_GENERATED_STATEMENT => <boolean_expr> ] )
QUERY_HISTORY_BY_SESSION(
[ SESSION_ID => <constant_expr> ]
[, END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ]
[, INCLUDE_CLIENT_GENERATED_STATEMENT => <boolean_expr> ] )
QUERY_HISTORY_BY_USER(
[ USER_NAME => '<string>' ]
[, END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ]
[, INCLUDE_CLIENT_GENERATED_STATEMENT => <boolean_expr> ] )
QUERY_HISTORY_BY_WAREHOUSE(
[ WAREHOUSE_NAME => '<string>' ]
[, END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ]
[, INCLUDE_CLIENT_GENERATED_STATEMENT => <boolean_expr> ] )
实参¶
所有实参均为可选。
END_TIME_RANGE_START => constant_expr
、.END_TIME_RANGE_END => constant_expr
过去 7 天内查询完成运行的时间范围(采用 TIMESTAMP_LTZ 格式):
如果未指定
END_TIME_RANGE_END
,该函数将返回所有查询,包括仍在运行的查询。如果
END_TIME_RANGE_END
为 CURRENT_TIMESTAMP,该函数仅返回已完成的查询。
如果时间范围不在过去 7 天内,则会返回错误。
备注
如果未指定开始或结束时间,则返回最近的查询,最多不超过指定的限制。
SESSION_ID => constant_expr
仅适用于 QUERY_HISTORY_BY_SESSION
会话或 CURRENT_SESSION 的数字标识符。仅返回来自指定会话的查询。
USER_NAME => 'string'
仅适用于 QUERY_HISTORY_BY_USER
指定用户登录名或 CURRENT_USER 的字符串。仅返回指定用户运行的查询。请注意,登录名称必须放在单引号内。此外,如果登录名称包含任何空格、混合大小写字符或特殊字符,则名称必须在单引号内使用双引号(例如
'"User 1"'
和'user1'
)。默认:CURRENT_USER
WAREHOUSE_NAME => 'string'
仅适用于 QUERY_HISTORY_BY_WAREHOUSE
指定仓库名称或 CURRENT_WAREHOUSE 的字符串。仅返回该仓库执行的查询。注意,仓库名称必须使用单引号括起来。此外,如果仓库名称包含任何空格、混合大小写字符或特殊字符,则名称必须在单引号内使用双引号(例如
'"My Warehouse"'
和'mywarehouse'
)。RESULT_LIMIT => num
用于指定函数返回的行数上限的数字:
如果匹配的行数大于此限制,则返回具有最近结束时间的查询(或仍在执行的查询),直至达到指定的限制。
范围:
1
至10000
默认:
100
。INCLUDE_CLIENT_GENERATED_STATEMENT => 'boolean_expr'
指定是否在表函数查询中包含客户端生成的语句(给定
is_client_generated_statement
列的值)。默认:
FALSE
。ACCOUNT_USAGE QUERY_HISTORY 视图 还包含一个
is_client_generated_statement
列,但此视图的查询会返回所有语句,无论它们是否由客户端生成。如由需要,您可以筛选查询结果。
使用说明¶
返回当前用户运行的查询。当执行方角色或层次结构中的更高级角色具有以下任一权限时,还会返回任何用户运行的查询:
运行查询的用户管理仓库上的 MONITOR 或 OPERATE 权限。
任务的 MONITOR 或 OPERATE 权限。例外情况:如果任务执行所有者权限的存储过程或 UDF,则该角色至少需要具有执行任务的仓库的 MONITOR 权限,才能查看存储过程查询和 UDF 查询。
任务所在账户的 MONITOR EXECUTION 权限。
例外情况:存储过程 和 用户自定义函数 (UDFs) 都不能运行此查询。
有关更多信息,请参阅 虚拟仓库权限。
调用 Information Schema 表函数时,会话必须使用 INFORMATION_SCHEMA,或者 函数名称必须为完全限定形式。有关更多信息,请参阅 Snowflake Information Schema。
external_function_total_invocations
、external_function_total_sent_rows
、external_function_total_received_rows
、external_function_total_sent_bytes
和external_function_total_received_bytes
列的值受许多因素影响,包括:SQL 语句中外部函数的数量。
发送到每个远程服务的每批的行数。
由于暂时性错误(例如,由于未在预期时间内收到响应)而导致的重试次数。
查询重试列¶
查询可能需要重试一次或多次才能成功完成。可能有多种原因导致查询重试。其中一些原因是 可操作的,也就是说,用户可以进行更改以减少或消除对特定查询的查询重试次数。例如,如果由于内存不足错误而重试查询,则修改仓库设置可能会解决问题。
某些查询重试是由不可操作的错误引起的。也就是说,用户无法进行任何更改来防止查询重试。例如,网络中断可能会导致查询重试。在这种情况下,对查询或执行查询的仓库进行任何更改都无法阻止查询重试。
QUERY_RETRY_TIME、QUERY_RETRY_CAUSE 和 FAULT_HANDLING_TIME 列可以帮助您优化重试的查询,更好地了解查询性能的波动。
输出¶
该函数返回以下列:
列名称 |
数据类型 |
描述 |
---|---|---|
|
VARCHAR |
语句的唯一 ID。 |
|
VARCHAR |
SQL 语句的文本。 |
|
VARCHAR |
编译时在查询上下文中指定的数据库。 |
|
VARCHAR |
编译时在查询上下文中指定的架构。 |
|
VARCHAR |
DML、查询等。 如果查询当前正在运行,或者查询失败,则查询类型可能为 UNKNOWN。 |
|
NUMBER |
执行语句的会话。 |
|
VARCHAR |
发出查询的用户。 |
|
VARCHAR |
执行查询的用户的类型。与 USERS 视图 中的 |
|
VARCHAR |
当 |
|
VARCHAR |
当 |
|
VARCHAR |
查询时会话中处于活动状态的角色。 |
|
VARCHAR |
执行查询的仓库(如果有)。 |
|
VARCHAR |
执行此语句时仓库的大小。 |
|
VARCHAR |
执行此语句时仓库的类型。 |
|
NUMBER |
执行此语句的群集(在多群集仓库中)。 |
|
VARCHAR |
通过 QUERY_TAG 会话参数为此语句设置的查询标签。 |
|
VARCHAR |
查询的执行状态:resuming_warehouse、running、queued、blocked、success、failed_with_error 或 failed_with_incident。 |
|
NUMBER |
错误代码(如果查询返回错误) |
|
VARCHAR |
错误消息(如果查询返回错误) |
|
TIMESTAMP_LTZ |
语句开始时间 |
|
TIMESTAMP_LTZ |
语句结束时间。如果查询仍在运行,则 |
|
NUMBER |
运行时间(以毫秒为单位) |
|
NUMBER |
此语句扫描的字节数。 |
|
NUMBER |
此语句生成的行数。 |
|
NUMBER |
编译时间(以毫秒为单位) |
|
NUMBER |
执行时间(以毫秒为单位) |
|
NUMBER |
由于仓库创建、恢复或调整大小,在仓库队列中等待仓库计算资源预置所花费的时间(以毫秒为单位)。 |
|
NUMBER |
在仓库队列中等待仓库中的计算资源进行修复所花费的时间(以毫秒为单位)。 |
|
NUMBER |
由于当前查询工作负载使仓库过载,在仓库队列中所花费的时间(以毫秒为单位)。 |
|
NUMBER |
因并发 DML 阻止而花费的时间(以毫秒为单位)。 |
|
VARCHAR |
将数据卸载到另一个区域和/或云的语句的目标云提供商。 |
|
VARCHAR |
将数据卸载到另一个区域和/或云的语句的目标区域。 |
|
NUMBER |
在将数据卸载到另一个区域和/或云的语句中传输的字节数。 |
|
VARCHAR |
从另一个区域和/或云加载数据的语句的源云提供商。 |
|
VARCHAR |
从另一个区域和/或云加载数据的语句的源区域。 |
|
NUMBER |
在复制操作中从另一个账户传输的字节数。源账户可能与当前账户位于相同区域或不同区域。 |
|
NUMBER |
列出外部文件所花费的时间(以毫秒为单位)。 |
|
NUMBER |
云服务使用的 Credit。 |
|
VARCHAR |
格式为 |
|
NUMBER |
此查询调用远程服务的汇总次数。有关重要详细信息,请参阅使用说明。 |
|
NUMBER |
此查询在对所有远程服务的所有调用中发送的总行数。 |
|
NUMBER |
此查询从对所有远程服务的所有调用接收的总行数。 |
|
NUMBER |
此查询在对所有远程服务的所有调用中发送的总字节数。 |
|
NUMBER |
此查询从对所有远程服务的所有调用接收的总字节数。 |
|
BOOLEAN |
表示查询是否由客户端生成。 |
|
VARCHAR |
根据规范化 SQL 文本计算的 哈希值。 |
|
NUMBER |
用于计算 |
|
VARCHAR |
根据参数化查询计算的 哈希值。 |
|
NUMBER |
用于计算 |
|
NUMBER |
包含语句的 事务的 ID,如果语句未在事务中执行,则为 |
|
NUMBER |
Query Acceleration Service 扫描的字节数。 |
|
NUMBER |
Query Acceleration Service 扫描的分区数。 |
|
NUMBER |
查询将从中受益的上限 比例因子。 |
|
NUMBER |
写入结果对象的字节数。例如, |
|
NUMBER |
写入结果对象的行数。对于 CREATE TABLE AS SELECT (CTAS) 和所有 DML 操作,此结果为 |
|
NUMBER |
查询插入的行数。 |
|
NUMBER |
由可操作错误导致的查询重试的总执行时间(以毫秒为单位)。有关更多信息,请参阅 查询重试列。 |
|
VARCHAR |
导致查询重试的错误。如果没有查询重试,则该字段为 NULL。有关更多信息,请参阅 查询重试列。 |
|
NUMBER |
由于 不 可操作错误导致的查询重试的总执行时间(以毫秒为单位)。有关更多信息,请参阅 查询重试列。 |
query_type
列的潜在值包括:
CREATE_USER
CREATE_ROLE
CREATE_NETWORK_POLICY
ALTER_ROLE
ALTER_NETWORK_POLICY
ALTER_ACCOUNT
DROP_SEQUENCE
DROP_USER
DROP_ROLE
DROP_NETWORK_POLICY
RENAME_NETWORK_POLICY
REVOKE
示例¶
检索当前会话中最近运行的最多 100 个查询:
SELECT *
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY_BY_SESSION())
ORDER BY start_time;
检索当前用户最近运行的最多 100 个查询(或当前用户拥有 MONITOR 权限的任何仓库上的任何用户运行的查询):
SELECT *
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY())
ORDER BY start_time;
检索当前用户在过去一小时内最近运行的最多 100 个查询(或当前用户拥有 MONITOR 权限的任何仓库上的任何用户运行的查询):
SELECT *
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY(DATEADD('hours',-1,CURRENT_TIMESTAMP()),CURRENT_TIMESTAMP()))
ORDER BY start_time;
检索当前用户在过去 7 天内指定的 30 分钟时间段内运行的所有查询(或当前用户拥有 MONITOR 权限的任何仓库上的任何用户运行的查询):
SELECT *
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY(
END_TIME_RANGE_START=>TO_TIMESTAMP_LTZ('2017-12-4 12:00:00.000 -0700'),
END_TIME_RANGE_END=>TO_TIMESTAMP_LTZ('2017-12-4 12:30:00.000 -0700')));
检索针对名为 my_xsmall_wh
的仓库运行的客户端生成的语句数量:
SELECT COUNT(*)
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY_BY_WAREHOUSE(
WAREHOUSE_NAME => 'my_xsmall_wh',
INCLUDE_CLIENT_GENERATED_STATEMENT => TRUE));