如何查询DLT管道多轮运行的执行时长并筛选出最快运行实例?
如何查询DLT管道多轮运行的执行时长并筛选出最快运行实例?
嗨,看起来你已经摸到门道了,但确实还有更精准的方式来区分每一次管道运行的时长,进而找出最快的那一次~
先直接回应你的疑问:你当前用SUM(executor_time_ms)得到的是执行器实际处理数据的总耗时,如果你的关注点是数据处理阶段的效率,这个数值是有参考价值的,但它不等于管道的完整运行时长——完整时长还包含了管道初始化、等待资源、收尾清理这些非执行阶段的时间,所以得看你具体要追踪哪类指标。
下面给你两种针对性的查询方案:
方案1:获取管道完整运行时长(从启动到结束)
这个方案会追踪管道每一次运行的启动和结束时间,计算真实的全周期耗时,更适合评估端到端的运行效率:
SELECT run_id, TIMESTAMPDIFF(MILLISECOND, start_time, end_time) AS total_run_duration_ms FROM ( SELECT run_id, MAX(CASE WHEN event_type = 'run_start' THEN timestamp END) AS start_time, MAX(CASE WHEN event_type = 'run_end' THEN timestamp END) AS end_time FROM event_log_raw WHERE event_type IN ('run_start', 'run_end') GROUP BY run_id ) WHERE end_time IS NOT NULL -- 过滤掉还在运行中的管道实例 ORDER BY total_run_duration_ms ASC LIMIT 1; -- 直接拿到耗时最短的那一次运行
方案2:获取执行器实际处理总耗时(优化你的原有查询)
如果只关心数据处理阶段的效率,可以把原有查询按run_id分组,这样就能得到每一次运行的执行器总耗时,再排序筛选最快的:
SELECT run_id, SUM(double(details:flow_progress.metrics.executor_time_ms)) AS total_executor_time_ms FROM event_log_raw WHERE event_type = 'flow_progress' GROUP BY run_id ORDER BY total_executor_time_ms ASC LIMIT 1;
另外要注意:如果你的查询里关联了latest_update表,记得把run_id也加入关联条件,确保拿到的是每一次运行的最新状态数据,避免统计到旧的或不完整的日志。
备注:内容来源于stack exchange,提问作者Brett
相关产品推荐
相关产品推荐

