【发布时间】:2020-02-23 19:59:25
【问题描述】:
为了track GCP costs using labels,想用一些额外的标签扩展BigQueryExecuteQueryOperator,以便每个任务实例在其构造函数中自动获取这些标签。
class ExtendedBigQueryExecuteQueryOperator(BigQueryExecuteQueryOperator):
@apply_defaults
def __init__(self,
*args,
**kwargs) -> None:
task_labels = {
'dag_id': '{{ dag.dag_id }}',
'task_id': kwargs.get('task_id'),
'ds': '{{ ds }}',
# ugly, all three params got in diff. ways
}
super().__init__(*args, **kwargs)
if self.labels is None:
self.labels = task_labels
else:
self.labels.update(task_labels)
with DAG(dag_id=...,
start_date=...,
schedule_interval=...,
default_args=...) as dag:
t1 = ExtendedBigQueryExecuteQueryOperator(
task_id=f't1',
sql=f'SELECT 1;',
labels={'some_additional_label2':'some_additional_label2'}
# all labels should be: dag_id, task_id, ds, some_additional_label2
)
t2 = ExtendedBigQueryExecuteQueryOperator(
task_id=f't2',
sql=f'SELECT 2;',
labels={'some_additional_label3':'some_additional_label3'}
# all labels should be: dag_id, task_id, ds, some_additional_label3
)
t1 >> t2
然后我丢失了任务级别标签some_additional_label2 或some_additional_label3。
【问题讨论】:
-
我在您的 DAG 中看到一个错字:
lables而不是t1和t2中的labels