COLUMN_QUERY_PRUNING_HISTORY 视图¶
使用此 Account Usage 视图可以更好地了解查询执行期间的数据访问模式,包括一些列级详细信息,例如“访问类型”和可能有益的候选 搜索优化表达式。
您可以将此视图与 TABLE_QUERY_PRUNING_HISTORY 视图 结合使用。例如,您可以使用 TABLE_QUERY_PRUNING_HISTORY 视图识别对目标表的访问权限,然后使用 COLUMN_QUERY_PRUNING_HISTORY 视图识别这些表中常用的列。
此视图中的每一行都表示给定时间间隔内,特定列的查询修剪历史记录。这些数据按列、表、时间间隔汇总,包括执行的查询数量、扫描的分区数量、修剪的分区数量、扫描的行数、删除的行数和匹配的行数等指标。
另请参阅 TABLE_PRUNING_HISTORY 视图 和 查询修剪。
列¶
列名称 |
数据类型 |
描述 |
---|---|---|
INTERVAL_START_TIME |
TIMESTAMP_LTZ |
执行和完成查询的时间范围(以小时为单位)的开始时间。 |
INTERVAL_END_TIME |
TIMESTAMP_LTZ |
执行和完成查询的时间范围(以小时为单位)的结束时间。 |
TABLE_ID |
NUMBER |
已查询表的内部/系统生成的标识符。 |
TABLE_NAME |
VARCHAR |
被查询表的名称。 |
SCHEMA_ID |
NUMBER |
包含被查询表的架构的内部/系统生成的标识符。 |
SCHEMA_NAME |
VARCHAR |
包含被查询表的架构的名称。 |
DATABASE_ID |
NUMBER |
包含被查询表的数据库的内部/系统生成的标识符。 |
DATABASE_NAME |
VARCHAR |
包含被查询表的数据库的名称。 |
WAREHOUSE_ID |
NUMBER |
用于运行查询的仓库的内部/系统生成标识符。 |
WAREHOUSE_NAME |
VARCHAR |
运行查询的仓库的名称。 |
QUERY_HASH |
VARCHAR |
根据规范化 SQL 文本计算的 哈希值。 |
QUERY_PARAMETERIZED_HASH |
VARCHAR |
根据参数化查询计算的 哈希值。 |
COLUMN_ID |
NUMBER |
为从所查询的表访问的列的内部/系统生成标识符。 |
COLUMN_NAME |
VARCHAR |
从所查询的表访问的列的名称。 |
VARIANT_PATH |
VARCHAR |
所访问的半结构化数据的路径(如适用)。如果所访问的列没有半结构化数据类型,则为 NULL。 |
ACCESS_TYPE |
VARCHAR |
对列( |
NUM_QUERIES |
NUMBER |
在此时间范围内,使用该仓库,在此表上访问该列(如果适用,还有变体路径),并具有此特定 QUERY_HASH 值且以此类型访问执行的查询数量。 |
AGGREGATE_QUERY_ELAPSED_TIME |
NUMBER |
由 NUM_QUERIES 定义的查询的总运行时间(以毫秒为单位)。此总计值包括排队时间以及其他与编译和执行无关的时间。 |
AGGREGATE_QUERY_COMPILATION_TIME |
NUMBER |
由 NUM_QUERIES 定义的查询的总编译时间(以毫秒为单位)。 |
AGGREGATE_QUERY_EXECUTION_TIME |
NUMBER |
由 NUM_QUERIES 定义的查询的总执行时间(以毫秒为单位)。 |
PARTITIONS_SCANNED |
NUMBER |
此表上为由 NUM_QUERIES 定义的查询而扫描的分区数。 |
PARTITIONS_PRUNED |
NUMBER |
此表上为由 NUM_QUERIES 定义的查询而修剪的分区数。这些分区会在查询处理过程中被删除,不会进行扫描,从而提高查询的效率。 |
ROWS_SCANNED |
NUMBER |
此表上为由 NUM_QUERIES 定义的查询而扫描的行数。 |
ROWS_PRUNED |
NUMBER |
此表上为由 NUM_QUERIES 定义的查询而修剪的行数。这些行在查询处理过程中会被删除,不会进行扫描,从而提高查询的效率。 |
ROWS_MATCHED |
NUMBER |
扫描此表以查找由 NUM_QUERIES 定义的查询时,与 WHERE 子句筛选器相匹配的行数。 |
SEARCH_OPTIMIZATION_SUPPORTED_EXPRESSIONS |
ARRAY |
此列中列出了支持的搜索优化表达式,这些表达式可能会加快扫描此表中由 NUM_QUERIES 定义的查询的速度。 |
使用说明¶
视图的延迟时间最长可达 4 小时。
数据保留 1 年。
此视图不包括 混合表 的修剪信息。
被授予 USAGE_VIEWER 数据库角色的用户和角色可以访问此视图。有关更多信息,请参阅 SNOWFLAKE 数据库角色。
ACCESS_TYPE 列包含以下值之一:
此视图中显示的访问行为体现了实际执行的查询计划,该计划可能不同于原始查询文本。例如,如果 HAVING 子句未引用 GROUP BY 子句生成的汇总结果,则可以对其进行优化并重写为 WHERE 子句,其 ACCESS_TYPE 值将为
WHERE
。对于无法从下推优化中受益的复杂筛选条件,即便行与筛选条件不匹配,在表扫描操作期间也可能不会筛选掉这些行。因此,这些行计入 ROWS_MATCHED 值。
目前,SEARCH_OPTIMIZATION_SUPPORTED_EXPRESSIONS 列仅建议 EQUALITY 和 SUBSTRING :ref:` 搜索方法 <label-alter_table_searchoptimizationaction>`。
此视图会保留每个查询运行时间最长的 1,000 次表扫描的数据。只有复杂度极高的查询才会超过此扫描次数,因此很少会有数据会被忽略。
示例¶
针对给定的一天,返回对特定表的查询的列级修剪历史记录:
SELECT interval_start_time, table_name, column_name, access_type, num_queries,
rows_scanned, rows_pruned, rows_matched,
search_optimization_supported_expressions::VARCHAR as search_optim
FROM SNOWFLAKE.ACCOUNT_USAGE.COLUMN_QUERY_PRUNING_HISTORY
WHERE interval_start_time like '2025-04-24%' AND table_name='SENSOR_DATA_TS'
ORDER BY 3, 1;
+-------------------------------+----------------+-------------+-------------+-------------+--------------+-------------+--------------+-----------------------------+
| INTERVAL_START_TIME | TABLE_NAME | COLUMN_NAME | ACCESS_TYPE | NUM_QUERIES | ROWS_SCANNED | ROWS_PRUNED | ROWS_MATCHED | SEARCH_OPTIM |
|-------------------------------+----------------+-------------+-------------+-------------+--------------+-------------+--------------+-----------------------------|
| 2025-04-24 14:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 5 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 14:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 5 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 15:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 15:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 15:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 5 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 15:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 19:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 19:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 3262387 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 2678400 | 2678400 | 394106 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 1227686 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 2678400 | 2678400 | 216642 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 2678400 | 2678400 | 216642 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 1227686 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 820272 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 3262387 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 3262387 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 1227686 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 2678400 | 2678400 | 216642 | NULL |
+-------------------------------+----------------+-------------+-------------+-------------+--------------+-------------+--------------+-----------------------------+
此查询中的 sensor_data_ts
表包含 5356800 行的合成时间序列数据。对于一些在 WHERE 子句条件中筛选了 device_id
和 temperature
列的查询,表中恰好有一半的行 (2678400) 被修剪。
建议将 device_id
列作为使用 EQUALITY 搜索方法进行搜索优化的目标。添加此搜索优化可能有益于表扫描。
小技巧
为简化读取,您可以使用 ARRAY_TO_STRING 函数将 SEARCH_OPTIMIZATION_SUPPORTED_EXPRESSIONS 列转换为字符串。例如:
ARRAY_TO_STRING(search_optimization_supported_expressions, ', ')