如何从S3嵌套桶结构动态获取指定JSON文件执行转换
解决方案
方法1:AWS CLI通配符快速定位
直接利用AWS CLI的递归查找和通配符匹配,不用管中间层级的ID,精准定位目标文件:
# 列出所有符合条件的result_.json路径 aws s3 ls s3://trd-data-lake-landing-zone/fetched_projects/ --recursive --include "*/analysis_*/result_.json" # 批量下载到本地目录 aws s3 cp s3://trd-data-lake-landing-zone/fetched_projects/ ./local-results/ --recursive --include "*/analysis_*/result_.json"
方法2:Python boto3代码动态筛选
如果要在流水线代码里集成,用boto3遍历S3对象并过滤路径:
import boto3 s3_client = boto3.client('s3') bucket = 'trd-data-lake-landing-zone' base_prefix = 'fetched_projects/' # 分页遍历所有S3对象 paginator = s3_client.get_paginator('list_objects_v2') pages = paginator.paginate(Bucket=bucket, Prefix=base_prefix) target_files = [] for page in pages: if 'Contents' not in page: continue for obj in page['Contents']: key = obj['Key'] # 匹配路径规则:包含analysis_*目录,且结尾是result_.json if '/analysis_' in key and key.endswith('/result_.json'): target_files.append(f's3://{bucket}/{key}') # 输出所有找到的文件路径 for path in target_files: print(path)
方法3:AWS大数据服务批量处理(流水线集成场景)
如果你的JSON扁平化流水线基于AWS生态,可以用Glue+Athena实现无代码批量处理:
- 在Glue创建爬虫,指向
s3://trd-data-lake-landing-zone/fetched_projects/,自动识别嵌套目录结构 - 在Athena中创建外部表后,用SQL筛选目标文件:
SELECT * FROM your_database.your_table WHERE "$path" LIKE '%/analysis_%/result_.json'
原方法失败原因
你之前的路径拼接忽略了中间的locations/location_<id>/design_<id>/层级,而且project、location、design、analysis的ID并不统一,硬编码拼接自然无法匹配真实路径。
内容的提问来源于stack exchange,提问作者Raghav Ritti
相关产品推荐
相关产品推荐

