簡體   English   中英

如何在另一個任務氣流中使用查詢(bigquery operator)的結果

[英]How to use the result of a query (bigquery operator) in another task-airflow

我在 google composser 中有一個項目,旨在每天提交。 下面的代碼就是這樣做的,它工作正常。

with models.DAG('reporte_prueba',
    schedule_interval=datetime.timedelta(weeks=4),
    default_args=default_dag_args) as dag:

    make_bq_dataset = bash_operator.BashOperator(
        task_id='make_bq_dataset',
        # Executing 'bq' command requires Google Cloud SDK which comes
        # preinstalled in Cloud Composer.
        bash_command='bq ls {} || bq mk {}'.format(
            bq_dataset_name, bq_dataset_name))
        
    bq_audit_query = bigquery_operator.BigQueryOperator(
        task_id='bq_audit_query',
        sql=query_sql,
        use_legacy_sql=False,
        destination_dataset_table=bq_destination_table_name)

    export_audits_to_gcs = bigquery_to_gcs.BigQueryToCloudStorageOperator(
        task_id='export_audits_to_gcs',
        source_project_dataset_table=bq_destination_table_name,
        destination_cloud_storage_uris=[output_file],
        export_format='CSV')
    
    download_file = GCSToLocalFilesystemOperator(
        task_id="download_file",
        object_name='audits.csv',
        bucket='bucket-reportes',
        filename='/home/airflow/gcs/data/audits.csv',
    )
    email_summary = email_operator.EmailOperator(
        task_id='email_summary',
        to=['aa@bb.cl'],
        subject="""Reporte de Auditorías Diarias 
        Institución: {institution_report} día {date_report}
        """.format(date_report=date,institution_report=institution),
        html_content="""
        Sres.
        <br>
        Adjunto enviamos archivo con Reporte Transacciones Diarias.
        <br>
        """,
        files=['/home/airflow/gcs/data/audits.csv'])

    delete_bq_table = bash_operator.BashOperator(
        task_id='delete_bq_table',
        bash_command='bq rm -f %s' % bq_destination_table_name,
        trigger_rule=trigger_rule.TriggerRule.ALL_DONE)


    (
        make_bq_dataset 
        >> bq_audit_query 
        >> export_audits_to_gcs 
        >> delete_bq_table
    )
    export_audits_to_gcs >> download_file >> email_summary

使用這段代碼,我用我需要發送的數據創建了一個表(稍后被刪除),然后將該表作為 csv 傳遞到存儲中。然后我將 .csv 下載到本地 airflow 目錄以通過郵件發送.

我的問題是,如果我可以避免創建表並將其存儲的部分。 因為我不需要它。

例如,使用BigqueryOperator 執行查詢並在ariflow 中訪問結果,從而在本地生成csv 然后發送。

我有辦法生成 CSV 但我最大的疑問是如何(如果可能的話)訪問查詢結果或將結果傳遞給另一個 airflow 任務

雖然我不建議跨任務傳遞 sql 查詢的結果,但 airflow 中的 XComs 通常用於任務之間的通信。

https://airflow.apache.org/docs/apache-airflow/stable/concepts/xcoms.html

您還需要創建一個自定義運算符來返回查詢結果,因為我“相信”BigQueryOperator 不會返回查詢結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM