QUERY_HISTORY、QUERY_HISTORY_BY_*¶
QUERY_HISTORY 表函数系列可用于查询各个维度上的 Snowflake 查询历史记录:
QUERY_HISTORY 返回指定时间范围内的查询。
QUERY_HISTORY_BY_SESSION 返回指定会话和时间范围内的查询。
QUERY_HISTORY_BY_USER 返回指定用户在指定时间范围内提交的查询。
QUERY_HISTORY_BY_WAREHOUSE 返回指定仓库在指定时间范围内执行的查询。
每个函数都针对沿指定维度的查询进行了优化。可以使用 SQL 谓词进一步筛选结果。
备注
这些函数返回过去 7 天内的查询活动。
另请参阅:
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> ] )
QUERY_HISTORY_BY_SESSION(
[ SESSION_ID => <constant_expr> ]
[, END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ] )
QUERY_HISTORY_BY_USER(
[ USER_NAME => '<string>' ]
[, END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ] )
QUERY_HISTORY_BY_WAREHOUSE(
[ WAREHOUSE_NAME => '<string>' ]
[, END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ] )
实参¶
所有实参均为可选。
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
。
使用说明¶
返回当前用户运行的查询。当执行角色或层次结构中的更高角色对运行查询的仓库具有 MONITOR 或 OPERATE 权限时,还会返回任何用户运行的查询。有关更多信息,请参阅 虚拟仓库权限。
当调用 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 列可以帮助您优化重试的查询,更好地了解查询性能的波动。
输出¶
该函数返回以下列:
列名称 |
数据类型 |
描述 |
---|---|---|
QUERY_ID |
VARCHAR |
语句的唯一 ID。 |
QUERY_TEXT |
VARCHAR |
SQL 语句的文本。 |
DATABASE_NAME |
VARCHAR |
编译时在查询上下文中指定的数据库。 |
SCHEMA_NAME |
VARCHAR |
编译时在查询上下文中指定的架构。 |
QUERY_TYPE |
VARCHAR |
DML、查询等。 如果查询当前正在运行,或者查询失败,则查询类型可能为 UNKNOWN。 |
SESSION_ID |
NUMBER |
执行语句的会话。 |
USER_NAME |
VARCHAR |
发出查询的用户。 |
ROLE_NAME |
VARCHAR |
查询时会话中处于活动状态的角色。 |
WAREHOUSE_NAME |
VARCHAR |
执行查询的仓库(如果有)。 |
WAREHOUSE_SIZE |
VARCHAR |
执行此语句时仓库的大小。 |
WAREHOUSE_TYPE |
VARCHAR |
执行此语句时仓库的类型。 |
CLUSTER_NUMBER |
NUMBER |
执行此语句的群集(在多群集仓库中)。 |
QUERY_TAG |
VARCHAR |
通过 QUERY_TAG 会话参数为此语句设置的查询标签。 |
EXECUTION_STATUS |
VARCHAR |
查询的执行状态:resuming_warehouse、running、queued、blocked、success、failed_with_error 或 failed_with_incident。 |
ERROR_CODE |
NUMBER |
错误代码(如果查询返回错误) |
ERROR_MESSAGE |
VARCHAR |
错误消息(如果查询返回错误) |
START_TIME |
TIMESTAMP_LTZ |
语句开始时间 |
END_TIME |
TIMESTAMP_LTZ |
语句结束时间。如果查询仍在运行,则 END_TIME 是针对本地时区调整的 UNIX 纪元时间戳(“1970-01-01 00:00:00”)。例如,对于太平洋标准时间,将是“1969-12-31 16:00:00.000 -0800”。 |
TOTAL_ELAPSED_TIME |
NUMBER |
运行时间(以毫秒为单位) |
BYTES_SCANNED |
NUMBER |
此语句扫描的字节数。 |
ROWS_PRODUCED |
NUMBER |
此语句生成的行数。 |
COMPILATION_TIME |
NUMBER |
编译时间(以毫秒为单位) |
EXECUTION_TIME |
NUMBER |
执行时间(以毫秒为单位) |
QUEUED_PROVISIONING_TIME |
NUMBER |
由于仓库创建、恢复或调整大小,在仓库队列中等待仓库计算资源预置所花费的时间(以毫秒为单位)。 |
QUEUED_REPAIR_TIME |
NUMBER |
在仓库队列中等待仓库中的计算资源进行修复所花费的时间(以毫秒为单位)。 |
QUEUED_OVERLOAD_TIME |
NUMBER |
由于当前查询工作负载使仓库过载,在仓库队列中所花费的时间(以毫秒为单位)。 |
TRANSACTION_BLOCKED_TIME |
NUMBER |
因并发 DML 阻止而花费的时间(以毫秒为单位)。 |
OUTBOUND_DATA_TRANSFER_CLOUD |
VARCHAR |
将数据卸载到另一个区域和/或云的语句的目标云提供商。 |
OUTBOUND_DATA_TRANSFER_REGION |
VARCHAR |
将数据卸载到另一个区域和/或云的语句的目标区域。 |
OUTBOUND_DATA_TRANSFER_BYTES |
NUMBER |
在将数据卸载到另一个区域和/或云的语句中传输的字节数。 |
INBOUND_DATA_TRANSFER_CLOUD |
VARCHAR |
从另一个区域和/或云加载数据的语句的源云提供商。 |
INBOUND_DATA_TRANSFER_REGION |
VARCHAR |
从另一个区域和/或云加载数据的语句的源区域。 |
INBOUND_DATA_TRANSFER_BYTES |
NUMBER |
在复制操作中从另一个账户传输的字节数。源账户可能与当前账户位于相同区域或不同区域。 |
LIST_EXTERNAL_FILE_TIME |
NUMBER |
列出外部文件所花费的时间(以毫秒为单位)。 |
CREDITS_USED_CLOUD_SERVICES |
NUMBER |
云服务使用的 Credit。 |
RELEASE_VERSION |
VARCHAR |
格式为 |
EXTERNAL_FUNCTION_TOTAL_INVOCATIONS |
NUMBER |
此查询调用远程服务的汇总次数。有关重要详细信息,请参阅使用说明。 |
EXTERNAL_FUNCTION_TOTAL_SENT_ROWS |
NUMBER |
此查询在对所有远程服务的所有调用中发送的总行数。 |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS |
NUMBER |
此查询从对所有远程服务的所有调用接收的总行数。 |
EXTERNAL_FUNCTION_TOTAL_SENT_BYTES |
NUMBER |
此查询在对所有远程服务的所有调用中发送的总字节数。 |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES |
NUMBER |
此查询从对所有远程服务的所有调用接收的总字节数。 |
IS_CLIENT_GENERATED_STATEMENT |
BOOLEAN |
表示查询是否由客户端生成。 |
QUERY_HASH |
VARCHAR |
根据规范化 SQL 文本计算的 哈希值。 |
QUERY_HASH_VERSION |
NUMBER |
用于计算 |
QUERY_PARAMETERIZED_HASH |
VARCHAR |
根据参数化查询计算的 哈希值。 |
QUERY_PARAMETERIZED_HASH_VERSION |
NUMBER |
用于计算 |
TRANSACTION_ID |
NUMBER |
包含语句的 事务的 ID,如果语句未在事务中执行,则为 |
QUERY_ACCELERATION_BYTES_SCANNED |
NUMBER |
Query Acceleration Service 扫描的字节数。 |
QUERY_ACCELERATION_PARTITIONS_SCANNED |
NUMBER |
Query Acceleration Service 扫描的分区数。 |
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR |
NUMBER |
查询将从中受益的上限 比例因子。 |
BYTES_WRITTEN_TO_RESULT |
NUMBER |
写入结果对象的字节数。例如, |
ROWS_WRITTEN_TO_RESULT |
NUMBER |
写入结果对象的行数。对于 CREATE TABLE AS SELECT (CTAS) 和所有 DML 操作,此结果为 |
ROWS_INSERTED |
NUMBER |
查询插入的行数。 |
QUERY_RETRY_TIME |
NUMBER |
由可操作错误导致的查询重试的总执行时间(以毫秒为单位)。有关更多信息,请参阅 查询重试列。 |
QUERY_RETRY_CAUSE |
VARIANT |
可操作错误的错误消息数组。此数组包含每次查询重试的一条错误消息。如果没有查询重试,则数组为空。有关更多信息,请参阅 查询重试列。 |
FAULT_HANDLING_TIME |
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')));