首页 > 解决方案 > 气流将最新文件从 GCS 存储桶复制到本地

问题描述

我想使用气流作曲家将最新文件从 gcs 存储桶复制到本地。我试图使用 gustil cp 获取最新文件并加载到本地气流中,但遇到问题: CommandException: No URLs match error 。如果我检查 XCom 我得到 value='Objects' 。有什么建议吗?

download_file = BashOperator(
   task_id='download_file',
   bash_command="gsutil cp $(gsutil ls -l gs://<bucket_name> | sort -k 2 | tail -1 | awk '''{print $3}''') /home/airflow/gcs/dags",
        xcom_push=True
    )

标签: google-cloud-platformgoogle-cloud-storageairflow

解决方案


执行 gsutil 命令gsutil ls -l gs://<bucket_name> | sort -k 2 | tail -1 | awk '''{print $3}'''还将显示总大小、对象等的行,将按日期排序然后获取最后一行并获取行的第三列。这就是为什么您将“对象”作为如下输出示例的值:

总计:6 个对象,28227013 字节 (26.92 MiB)

尝试使用此代码仅获取倒数第二行:

download_file = BashOperator(
   task_id='download_file',
   bash_command="gsutil cp $(gsutil ls -l gs://bucket_name | sort -k 2 | tail -2 | head -n1 | awk '''{print $3}''') /home/airflow/gcs/dags",
        xcom_push=True
)

推荐阅读