使用GCSToGCSOperator通配符移动文件时文件名前缀丢失如何解决?
解决GCSToGCSOperator移动文件丢失首字母的问题
你遇到的问题是因为GCSToGCSOperator处理带通配符的源路径时,默认会将通配符前的前缀部分替换为目标路径,导致文件名的首字母(S/T)被截断。以下是几种可行的解决方案:
方法1:用wildcard参数匹配多前缀文件
通过wildcard参数指定匹配规则,一次性筛选出所有以S或T开头的文件,移动时保留完整文件名:
input_dir = input_path destination_dir = f'{archive_path}/' task_mv_rest_files_to_archive = GCSToGCSOperator( task_id='Move_files_to_archive', source_bucket=my_bucket_name, source_objects=[input_dir], destination_bucket=bucket_name, destination_object=destination_dir, wildcard='[ST]*', # 匹配以S或T开头的所有文件 move_object=True, dag=dag )
方法2:拆分任务分别处理两类文件
创建两个独立任务分别处理S和T开头的文件,避免通配符导致的路径替换问题:
# 移动以S开头的文件 task_mv_S_files = GCSToGCSOperator( task_id='Move_S_files_to_archive', source_bucket=my_bucket_name, source_objects=[f'{input_path}/S*'], destination_bucket=bucket_name, destination_object=f'{archive_path}/', move_object=True, dag=dag ) # 移动以T开头的文件 task_mv_T_files = GCSToGCSOperator( task_id='Move_T_files_to_archive', source_bucket=my_bucket_name, source_objects=[f'{input_path}/T*'], destination_bucket=bucket_name, destination_object=f'{archive_path}/', move_object=True, dag=dag ) # 可根据需求设置任务执行顺序,并行执行可省略此依赖 task_mv_S_files >> task_mv_T_files
方法3:用replace_prefix明确路径映射
通过replace_prefix参数指定精确的路径替换规则,确保文件名前缀被保留:
source_objects = [f'{input_path}/S*', f'{input_path}/T*'] destination_dir = archive_path task_mv_rest_files_to_archive = GCSToGCSOperator( task_id='Move_files_to_archive', source_bucket=my_bucket_name, source_objects=source_objects, destination_bucket=bucket_name, replace_prefix={ f'{input_path}/S': f'{destination_dir}/S', f'{input_path}/T': f'{destination_dir}/T' }, move_object=True, dag=dag )
内容的提问来源于stack exchange,提问作者Murat Ahat
相关产品推荐
相关产品推荐

