簡體   English   中英

Airflow - 在 2 個不同的項目中將 blob 從/復制到 Google Cloud Storage

[英]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.

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