![](/img/trans.png)
[英]Airflow BigQuery Operator - Copying One Table to Another Table
[英]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.