【发布时间】:2018-09-03 06:18:19
【问题描述】:
在气流中,可以使用简单的print() 或使用建议的记录器here 写入日志
但是,当尝试在运算符内部打印时,这将不起作用。
我有以下代码:
for i in range(5, 0, -1):
gcs_export_uri_template = ["adstest/{{ macros.ds_format(macros.ds_add(ds, -params.i), '%Y-%m-%d', '%Y/%m/%d') }}/*"]
update_bigquery = GoogleCloudStorageToBigQueryOperator(
dag=dag,
task_id='load_ads_to_BigQuery-{}'.format(i),
bucket=GCS_BUCKET_ID,
destination_project_dataset_table=table_name_template,
source_format='CSV',
source_objects=gcs_export_uri_template,
schema_fields=dc(),
params={'i': i},
create_disposition='CREATE_IF_NEEDED',
write_disposition='WRITE_APPEND',
skip_leading_rows=1,
google_cloud_storage_conn_id=CONNECTION_ID,
bigquery_conn_id=CONNECTION_ID
)
现在说我要打印"My name is load_ads_to_BigQuery-{}".format{i)
如您所见,此打印是每个操作员唯一的。
如果我这样做:
for i in range(5, 0, -1):
print("My name is load_ads_to_BigQuery-{}".format{i))
gcs_export_uri_template = ...
update_bigquery = GoogleCloudStorageToBigQueryOperator(...)
所有 5 个操作员将打印所有 5 个打印件。在我的情况下这是不正确的。
打印必须在GoogleCloudStorageToBigQueryOperator 内。
我该怎么做?
【问题讨论】:
-
您也可以使用 BaseOperator 中的 log 方法记录 inside 运算符,例如
self.log.info("This was %s", "fun")。所有的打印语句都是在 dag 中完成的,还是你的 for 循环在自定义 Operator 中? -
@judoole 我不确定我是否理解
-
您是在 dag 文件中打印,还是在自创模块中打印,在 for 循环中创建 5 个
GoogleCloudStorageToBigQueryOperators?抱歉回复晚了。 -
@judoole 我根本不打印。我想将打印添加到我的代码中。我想在 GoogleCloudStorageToBigQueryOperator 中打印。
-
我认为这是所有运营商的问题。您是在建议我将我的操作员包装在一个将打印然后执行操作员的函数中。我认为气流不支持这一点:\我提交了一张票issues.apache.org/jira/browse/AIRFLOW-3000