我试图使用作曲者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
答案 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,以供下游任务随后使用。除非您根本不需要其他任务来使用此数据,否则在这种情况下您可以根据自己的喜好进行处理(问题尚不清楚)。