You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中查看TASK执行查询的Profile及SQL排查执行计划方法

解决TASK执行查询的Query Profile查看问题
  • 通过查询ID定位Snowsight中的任务查询:
    先执行以下SQL获取任务对应的查询ID:
    SELECT QUERY_ID 
    FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY()) 
    WHERE TASK_NAME = '你的任务名称'
    ORDER BY SCHEDULED_TIME DESC;
    
    拿到查询ID后,在Snowsight的查询历史页面,用该ID精准搜索,即可找到目标查询,点击进入就能查看Query Profile。若搜不到,检查当前选择的角色、仓库、数据库是否和任务一致,以及查询时间范围是否覆盖任务执行时段。
  • 用SQL直接获取Query Profile的结构化数据:
    如果Snowsight中无法找到,可直接通过SQL提取查询计划的详细信息:
    SELECT * 
    FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.QUERY_PROFILE(QUERY_ID => '你的查询ID'))
    ORDER BY OPERATOR_ID;
    
    结果会返回查询计划各节点的执行时间、数据处理量、操作类型等核心信息,可替代可视化的Query Profile进行分析。
SQL对比/排查查询执行计划的替代方法
  • 对比执行计划的文本/JSON结构:
    对目标查询执行EXPLAIN或EXPLAIN USING JSON生成执行计划:
    -- 生成文本格式计划
    EXPLAIN SELECT 你的查询语句;
    
    -- 生成JSON格式结构化计划
    EXPLAIN USING JSON SELECT 你的查询语句;
    
    文本格式可直接对比差异,JSON格式则可通过SQL解析(比如用GET_PATH函数)提取关键节点(如扫描方式、JOIN类型、过滤条件)进行精准对比。
  • 基于历史查询数据的批量对比:
    结合QUERY_HISTORY和QUERY_PROFILE,用SQL聚合分析多个查询的执行指标,快速定位差异:
    SELECT 
      qh.QUERY_ID,
      qh.START_TIME,
      qh.TOTAL_ELAPSED_TIME,
      qh.BYTES_SCANNED,
      qp.OPERATION_TYPE,
      qp.TOTAL_TIME
    FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY()) qh
    JOIN TABLE(SNOWFLAKE.INFORMATION_SCHEMA.QUERY_PROFILE(qh.QUERY_ID)) qp
    ON qh.QUERY_ID = qp.QUERY_ID
    WHERE qh.QUERY_TEXT LIKE '%你的查询特征%'
    ORDER BY qh.START_TIME DESC;
    
  • 用QUERY_TAG标记并分类查询:
    在任务定义或查询中添加QUERY_TAG(如ALTER TASK 你的任务名 SET QUERY_TAG = 'ETL_DAILY_TASK';),之后可通过标签过滤查询历史,批量对比同一类任务的执行情况:
    SELECT QUERY_ID, TOTAL_ELAPSED_TIME, BYTES_SCANNED
    FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY())
    WHERE QUERY_TAG = 'ETL_DAILY_TASK'
    ORDER BY START_TIME DESC;
    
  • 关联仓库负载分析执行差异:
    若查询执行异常是资源问题导致,可结合WAREHOUSE_LOAD_HISTORY查看任务执行时段的仓库负载:
    SELECT 
      START_TIME,
      AVG_RUNNING,
      AVG_QUEUED_LOAD,
      CPU_USAGE_PERCENT
    FROM TABLE(INFORMATION_SCHEMA.WAREHOUSE_LOAD_HISTORY(WAREHOUSE_NAME => '你的仓库名'))
    WHERE START_TIME BETWEEN '任务开始时间' AND '任务结束时间';
    
    通过分析并发数、队列长度、CPU使用率,判断是否因资源竞争导致执行效率差异。

内容的提问来源于stack exchange,提问作者gjoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 18:12:48