如何验证BigQuery中Job的avgPreviousExecutionMs数值?
BigQuery avgPreviousExecutionMs 字段验证问题解答
正确验证方法
- 匹配正确的Query Hash:
avgPreviousExecutionMs关联的是normalized query hash,需使用query_info.query_hashes.normalized_query_hash而非normalized_literals进行匹配,后者是字面量归一化哈希,和字段依赖的归一化查询哈希并非同一值。 - 过滤无效任务:仅统计状态为
DONE的成功任务,排除被取消、失败的任务,以及执行时长为0的异常记录,避免干扰平均值计算。 - 对齐时间范围:查询INFORMATION_SCHEMA时的时间范围需和
avgPreviousExecutionMs的统计窗口保持一致(见下文时间范围说明)。
数据时间范围
avgPreviousExecutionMs基于过去7天内的同归一化哈希成功任务历史数据计算,且会排除当前正在运行的任务本身。
依赖的INFORMATION_SCHEMA视图
该字段的数据来源逻辑与JOBS视图一致,验证时可根据权限和范围选择对应视图:
- 验证当前用户的任务,用
JOBS_BY_USER - 跨用户/项目验证,用
JOBS(需对应权限) - 文件夹/组织级别的任务统计,对应
JOBS_BY_FOLDER/JOBS_BY_ORGANIZATION
核心是确保视图包含目标任务数据,且匹配正确的归一化查询哈希。
示例验证SQL
SELECT AVG(total_slot_ms / slot_time) AS calculated_avg_ms FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_USER WHERE query_info.query_hashes.normalized_query_hash = '<目标归一化哈希>' AND job_id != '<当前任务ID>' AND state = 'DONE' AND end_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
内容的提问来源于stack exchange,提问作者saivasanth528
相关产品推荐
相关产品推荐

