重命名Blob文件夹并调整Parquet结构是否需用Copy Foreach循环
完全可以通过单个Copy Activity实现需求,不需要循环迭代,8GB数据量完全在单活动的处理能力范围内,具体配置步骤如下:
1. 数据集配置
- 源和目标都选择二进制格式的Azure Blob Storage数据集,避免不必要的Parquet文件解析,大幅提升拷贝效率
- 源数据集路径指向你原有Parquet文件的根目录,开启递归读取权限
原有文件路径格式:
yyyy/MM/dd/yyyy_MM_dd_hh_mm_ss_[source].parquet
2. Copy Activity核心配置
不需要调整默认的Copy Behavior,只需要在Sink(目标端)配置动态路径和动态文件名即可:
动态目标路径配置
用字符串拆分函数提取源文件路径中的年、月、日字段,拼接成Hive风格的分区路径:@concat('Year=', split(item().sourceFilePath, '/')[0], '/Month=', split(item().sourceFilePath, '/')[1], '/Day=', split(item().sourceFilePath, '/')[2])
如果是在全局Copy Activity中直接调用源文件属性,将item().sourceFilePath替换为你实际获取到的源文件全路径变量即可,注意调整路径拆分的下标适配你的实际路径结构
动态文件名配置
将原文件名中的时分秒字段统一替换为00_00_00,保留原日期和数据源标识:@concat(split(split(item().sourceFilePath, '/')[3], '_')[0], '_', split(split(item().sourceFilePath, '/')[3], '_')[1], '_', split(split(item().sourceFilePath, '/')[3], '_')[2], '_00_00_00_', split(split(item().sourceFilePath, '/')[3], '_')[6])
调整后的目标路径格式:
Year=2019/Month=04/Day=01/2019_04_01_00_00_00_ABCXYZ01.Parquet
3. 注意事项
- 如果原文件后缀存在
.Parquet和.parquet大小写不一致的情况,可以在表达式最后加toLower()或者toUpper()统一后缀格式 - 不需要开启分片或者批量处理,8GB全量数据单Copy Activity正常5分钟内即可跑完,成本和效率都远高于迭代方案
内容的提问来源于stack exchange,提问作者user2181700

