BigQuery父作业为BATCH时子作业仍采用INTERACTIVE优先级问题咨询
BigQuery脚本子作业不继承父批处理优先级的原因说明
这是BigQuery的默认设计行为,并非Bug。当你通过--batch提交脚本(多语句、存储过程调用)时,只有顶层的脚本调度作业(父作业)会被标记为BATCH优先级,而脚本内部的子语句、存储过程调用会作为独立的子作业执行,默认采用INTERACTIVE优先级,不会自动继承父作业的批处理属性。
背后的逻辑
BigQuery将脚本本身和内部执行的子任务视为两个层级的作业单元:
- 父脚本作业:负责解析脚本语法、调度子任务的执行顺序,它的优先级由你提交时的
--batch参数决定。 - 子作业:脚本内的每条独立查询、存储过程调用都是单独的执行单元,BigQuery默认会给这类子任务分配INTERACTIVE优先级,除非你在脚本内显式指定批处理优先级。
对应你的复现场景
- 单条语句:没有子作业层级,整个查询就是一个BATCH优先级的作业,所以仅生成一条BATCH记录。
- 多条语句:父脚本是BATCH优先级的调度作业,两个SELECT语句作为独立子作业,默认用INTERACTIVE,因此生成3条记录(父BATCH + 子INTERACTIVE×2)。
- 不带--batch:父脚本和所有子作业都使用默认的INTERACTIVE优先级,所以全部记录都是INTERACTIVE。
让子作业也用BATCH优先级的办法
如果需要子作业继承批处理优先级,可在脚本开头添加优先级设置语句,强制所有子任务使用BATCH:
bq query --batch --use_legacy_sql="False" "SET @@job_priority = BATCH; select current_timestamp();select current_timestamp();"
执行后查询INFORMATION_SCHEMA.JOBS,会看到父脚本和两个子作业的优先级均为BATCH。
内容的提问来源于stack exchange,提问作者sacoder
相关产品推荐
相关产品推荐

