作曲家中的bash运算符可将最新文件从一个GCS存储桶复制到另一个

时间:2019-01-02 13:07:03

标签: bash google-cloud-platform google-cloud-storage airflow

我编写了以下运行BashOperator的DAG脚本(Python代码)。这很奇怪,因为当我将bash命令启动到终端时,bash命令可以顺利运行。但是,当我将其包装到Airflow DAG中的BashOperatgor中时,该命令相同。

此代码的目的是将(今天的)最后一个文件从一个GCS存储桶复制到另一个存储桶。下面是代码:

从airflow.operators.bash_operator导入BashOperator 从气流进口DAG 从datetime导入datetime

<input type="submit" id="clk" class="buttonN" style="background-color:#1D03FB" value="Open Ad">

我收到以下错误消息:DEFAULT_DAG_ARGS = { 'owner': 'name', 'depends_on_past': False, 'start_date': datetime.now(), 'retries': 0, 'schedule_interval': None } with DAG('copy_input_files', default_args=DEFAULT_DAG_ARGS) as dag: pre_dag_cp = BashOperator( task_id='copy_current_files', bash_command="gsutil -m ls -l gs://input/files/UES | grep $(date -I) | sed 's/.*\(gs:\/\/\)/\1/'| gsutil cp -I gs://output/recent_files " + "\nexit 0" ) 并且未按预期复制任何文件,当我在基本终端中的dag外部测试bash命令时,此方法可行,请知道如何解决此问题

1 个答案:

答案 0 :(得分:0)

请查看专门负责此任务的操作员。

from airflow.contrib.operators.gcs_to_gcs import GoogleCloudStorageToGoogleCloudStorageOperator

            copy_single_file = GoogleCloudStorageToGoogleCloudStorageOperator(
                task_id='copy_single_file',
                source_bucket='data',
                source_object='sales/sales-2017/january.avro',
                destination_bucket='data_backup',
                destination_object='copied_sales/2017/january-backup.avro',
                google_cloud_storage_conn_id=google_cloud_conn_id
            )

参考:https://github.com/apache/incubator-airflow/blob/master/airflow/contrib/operators/gcs_to_gcs.py