![](/img/trans.png)
[英]Airflow operator to copy many files (directory, prefix) from Google Cloud Storage bucket to local filesystem
[英]Airflow - Copy blob from/to Google Cloud Storage within 2 different projects
我正在嘗試使用 Airflow 將項目 X 中的 GCS 存儲桶 A 中的 blob 復制到項目 Y 中的存儲桶 B。
似乎可用運算符 (GCSToGCSOperator) 僅在同一項目中的兩個存儲桶之間運行良好。
在我的案例中,我怎樣才能獲得副本?
我想避免使用 BashOperator ...
謝謝!!
選項 1:使用CloudDataTransferServiceCreateJobOperator
,它使用Google API創建傳輸作業。 您可以在文檔中找到有關它的信息。 請注意,這需要服務帳戶可以訪問兩者。 如果不是這種情況,那么它還不受支持 請參閱使用 Google Storage Transfer API 將數據從外部 GCS 傳輸到我的 GCS
選項 2:對項目 1 使用GCSToLocalFilesystemOperator
,然后對項目 2 使用LocalFilesystemToGCSOperator
。
此解決方案的框架:
from airflow import DAG
from airflow.providers.google.cloud.transfers.local_to_gcs import LocalFilesystemToGCSOperator
from airflow.providers.google.cloud.transfers.gcs_to_local import GCSToLocalFilesystemOperator
with DAG(
"example", schedule_interval="@daily", start_date=datetime(2021, 1, 1), catchup=False
) as dag:
download = GCSToLocalFilesystemOperator(
task_id="download_task",
bucket='some_bucket',
filename='/tmp/fake1.csv',
object_name="test/test1.csv",
gcp_conn_id='google_cloud_origin'
)
upload = LocalFilesystemToGCSOperator(
task_id='upload_task',
bucket='some_bucket',
src='/tmp/fake1.csv',
dst='test/test1.csv',
gcp_conn_id='google_cloud_dest'
)
download >> upload
雖然這不是理想的解決方案。 這實際上取決於您的工作量和頻率。 使用此解決方案,您可以通過本地磁盤傳輸文件 - 小批量就可以了。 此解決方案適用於兩個不同帳戶的情況,因為每個運營商都關聯到不同的 Google 連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.