类别:

Information Schema表函数

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> ] )
Copy

实参

所有实参均为可选。

END_TIME_RANGE_START => constant_expr. END_TIME_RANGE_END => constant_expr

过去 7 天内查询完成运行的时间范围(采用 TIMESTAMP_LTZ 格式):

  • 如果未指定 END_TIME_RANGE_END,该函数将返回所有查询,包括仍在运行的查询。

  • 如果 END_TIME_RANGE_ENDCURRENT_TIMESTAMP,该函数仅返回已完成的查询。

如果时间范围不在过去 7 天内,则会返回错误。

备注

如果未指定开始或结束时间,则返回最近的查询,最多不超过指定的限制。

SESSION_ID => constant_expr

仅适用于 QUERY_HISTORY_BY_SESSION

会话或 CURRENT_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')。

默认:CURRENT_WAREHOUSE

RESULT_LIMIT => num

用于指定函数返回的行数上限的数字:

如果匹配的行数大于此限制,则返回具有最近结束时间的查询(或仍在执行的查询),直至达到指定的限制。

范围:110000

默认: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

格式为 major_release.minor_release.patch_release 的版本。

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_HASH逻辑版本

QUERY_PARAMETERIZED_HASH

VARCHAR

根据参数化查询计算的 哈希值

QUERY_PARAMETERIZED_HASH_VERSION

NUMBER

用于计算 QUERY_PARAMETERIZED_HASH逻辑版本

TRANSACTION_ID

NUMBER

包含语句的 事务的 ID,如果语句未在事务中执行,则为 0

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

写入结果对象的字节数。例如,select * from ... 将生成一组表格格式的结果,表示所选内容中的每个字段。. . 通常,结果对象表示作为查询结果生成的任何内容,BYTES_WRITTEN_TO_RESULT 表示返回结果的大小。

ROWS_WRITTEN_TO_RESULT

NUMBER

写入结果对象的行数。对于 CREATE TABLE AS SELECT (CTAS) 和所有 DML 操作,此结果为 1

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;
Copy

检索当前用户最近运行的最多 100 个查询(或当前用户拥有 MONITOR 权限的任何仓库上的任何用户运行的查询):

select *
from table(information_schema.query_history())
order by start_time;
Copy

检索当前用户在过去一小时内最近运行的最多 100 个查询(或当前用户拥有 MONITOR 权限的任何仓库上的任何用户运行的查询):

select *
from table(information_schema.query_history(dateadd('hours',-1,current_timestamp()),current_timestamp()))
order by start_time;
Copy

检索当前用户在过去 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')));
Copy
语言: 中文