如何使用作曲者DAG从GCP存储桶中递归读取文件名

时间:2019-11-19 09:40:32

标签: google-cloud-platform composer-php airflow directed-acyclic-graphs

我试图使用作曲者DAG从所有文件夹,存储桶下的子文件夹中递归地从GCS存储桶读取文件名。可能吗?例如,我有带有相应文件夹和子文件夹的存储桶,如下所述。静态是存储桶名称。

static / folder1 / subfolder1 / file1.json 静态/文件夹1 /子文件夹2 / file2.json 静态/文件夹1 /子文件夹3 / file3.json 静态/文件夹1 /子文件夹3 / file4.json

我想递归地读取文件并将数据放在两个变量中,如下所示。

bucketname =静态 filepath = static / folder1 / subfolder3 / file4.json

1 个答案:

答案 0 :(得分:1)

您可以使用Airflow的BashOperator来使用GCS CLI工具(docs here)。

示例如下:

read_files = BashOperator(
    task_id='read_files',
    bash_command='gsutil ls -r gs://bucket',
    dag=dag,
)

编辑:由于要捕获输出,而BashOperator仅将stdout的最后一行推送到XCom,因此建议使用PythonOperator来调用使用GCS的自定义Python可调用对象API或什至通过subprocess的CLI工具来收集所有文件名并将其推送到XCom,以供下游任务随后使用。除非您根本不需要其他任务来使用此数据,否则在这种情况下您可以根据自己的喜好进行处理(问题尚不清楚)。