在BigQueryOperator中提取xcom

时间:2019-04-01 19:26:35

标签: google-bigquery airflow apache-airflow-xcom

我正在尝试根据以前使用xcom的任务运行带有一些动态参数的BigQueryOperator(我设法使用带有xcom_push = True的BashOperator来推送它)

我认为使用以下方法可以解决问题

def get_next_run_date(**context):
    last_date = context['task_instance'].xcom_pull(task_ids=['get_autoplay_last_run_date'])[0].rstrip()
    last_date = datetime.strptime(last_date, "%Y%m%d").date()
    return last_date + timedelta(days=1)

t3 = BigQueryOperator(
    task_id='autoplay_calc',
    bql='autoplay_calc.sql',
    params={
            "env" : deployment
            ,"region" : region
            ,"partition_start_date" : get_next_run_date()
            },
    bigquery_conn_id='gcp_conn',
    use_legacy_sql=False,
    write_disposition='WRITE_APPEND',
    allow_large_results=True,
    #provide_context=True,
    destination_dataset_table=reporting_project + '.pa_reporting_public_batch.autoplay_calc',
    dag=dag
    )` 

但是使用上面的命令,我会遇到“任务_实例”错误,并出现断线错误。

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用context ['ti']。xcom_pull()?

答案 1 :(得分:0)

您使用的方式有误。

您不能在xcom中使用params。您需要在bql/sql参数中使用它。您的sql文件autoplay_calc.sql可以包含类似

的内容
select * from XYZ where date == "{{xcom_pull(task_ids=['get_autoplay_last_run_date'])[0].rstrip() }}"