如何在BigQuery中识别成本最高的已调度查询?
识别BigQuery中成本最高的已调度查询
方法一:通过系统表关联直接获取调度查询名称
BigQuery的INFORMATION_SCHEMA.TRANSFERS表存储了已调度查询(属于数据传输任务的一种)的元数据,包括显示名称。直接将它与JOBS表通过transfer_config_name字段关联,就能拿到对应调度查询的名称:
SELECT t.display_name AS 调度查询名称, TIMESTAMP_MILLIS(j.creation_time) AS 执行时间, j.job_id, j.user_email, j.bytes_billed AS 计费字节数, j.total_bytes_processed AS 总处理字节数 FROM `my_project_id.region-eu.INFORMATION_SCHEMA.JOBS` j INNER JOIN `my_project_id.region-eu.INFORMATION_SCHEMA.TRANSFERS` t ON j.transfer_config_name = t.transfer_config_name WHERE STARTS_WITH(j.job_id, 'scheduled_query') AND j.parent_job_id IS NULL ORDER BY j.bytes_billed DESC
这个方法无需手动添加任何标签,直接利用系统内置元数据关联,是最便捷的方式。
方法二:正确给调度查询添加标签(修复CLI命令)
你之前使用bq update命令时标签格式错误,BigQuery标签要求用key=value格式而非key:value,修正后的命令如下:
bq update --transfer_config projects/[你的项目ID]/locations/[区域]/transferConfigs/[传输配置ID] --set_label scheduled_query=[你的查询名称]
执行该命令后,后续调度运行的查询任务会自动带上这个标签,你可以在JOBS表的labels字段中看到,此时可用以下查询筛选:
SELECT TIMESTAMP_MILLIS(creation_time) AS 执行时间, job_id, user_email, labels.scheduled_query AS 调度查询名称, bytes_billed AS 计费字节数 FROM `my_project_id.region-eu.INFORMATION_SCHEMA.JOBS` WHERE STARTS_WITH(job_id, 'scheduled_query') AND parent_job_id IS NULL ORDER BY bytes_billed DESC
注意事项
- 会话标签
SET @@query_label仅作用于子任务,无法关联到调度查询的父任务,不适合用于识别调度查询本身。 - 关联
TRANSFERS表的方法适用于所有已存在的调度查询历史任务,而添加标签的方式仅对命令执行后的新任务生效。
内容的提问来源于stack exchange,提问作者Sander van den Oord
相关产品推荐
相关产品推荐

