使用气流将gcs文件上传到Google驱动器

问题描述

嗨,我正在尝试使用以下方式将文件从GCS上传到Gdrive:

airflow.contrib.operators.gcs_to_gdrive_operator import GcsToGDriveOperator

这是dag的样子

copy_to_gdrive = GcsToGDriveOperator(
    task_id="copy_to_gdrive",source_bucket="my_source_bucket_on_gcs",source_object="airflow-dag-test/report.csv",destination_object="/airflow-test/report.csv",gcp_conn_id="bigquery_default",dag=dag
)

代码执行成功,没有任何错误,在日志中,我可以看到文件已成功下载到本地并成功上传到gdrive。

代码由服务帐户执行,我面临的问题是我找不到该dag正在创建上传文件或目录

我尝试了“ destination_object”的路径的几种排列/组合,但似乎没有任何效果,谷歌文档也没有帮助。

我可以在api日志中看到drive.create api正在被调用,但是创建文件的位置未知。有人经历过吗?任何帮助或小费都会有很大帮助。谢谢!

解决方法

您的服务帐户是一个Google帐户,作为Google帐户,它可以访问自己的驱动器。该文件已正确复制到云端硬盘,但已复制到服务帐户的硬盘!

您从不指定帐户,那么,Airflow如何知道它必须使用您的帐户?

看看operator documentation

delegate_to(str)–要模拟的帐户(如果有)。为此,发出请求的服务帐户必须启用域范围的委派。

使用此参数,在其中填入您的电子邮件,然后激活对您的服务帐户的域委派。