使用IICS加载NAS文件夹多Excel文件至S3的方案及问题排查
现有File Ingestion Task仅加载1个文件的排查方向
- 优先检查
filelist.txt格式:IICS Secure Agent识别文件列表要求每行仅填写1个文件的绝对全路径,无空行、无注释、无多余空格,如果是在Windows本地编辑的txt文件,换行符默认是CRLF格式,挂载到Linux环境的Secure Agent会识别异常,大概率只把第一行解析为有效文件路径,其余行全部判定为无效路径直接跳过,把文件转成LF换行格式再试。 - 检查路径拼接逻辑:选择Filelist作为源类型时,目录参数不要和filelist内的路径重复拼接——如果filelist里写的是文件全路径,目录参数留空即可,重复拼接会导致除第一个文件外其余路径全部不存在。
- 检查任务校验开关:File Ingestion Task默认开启源文件schema一致性校验,你手头的Excel文件列名、列数均不统一,第一个文件加载完成后,读取到第二个结构不一致的文件时,任务不会抛出中断级错误,只会直接跳过后续所有文件,日志里只会打一条低优先级的schema mismatch告警,这是该场景下最常见的故障原因。
- 检查文件权限:确认Secure Agent运行的系统账号对NAS目录下所有Excel文件均有读权限,手动上传的文件常带有独立权限锁,会出现第一个文件可读、其余文件无权限的情况。
单Taskflow实现多Excel批量加载S3的实操步骤
该方案不需要手动维护文件列表,异构结构的Excel可以原样传输到S3,不需要做schema对齐,全程只需要一个Taskflow调度:
- 步骤1:创建自动文件清单任务
新建一个Data Integration数据集成任务,源端选择已配置好的NAS连接,源对象选中目标NAS文件夹,开启「递归列出目录下所有文件」选项,输出字段仅保留file_full_path(文件全路径)字段,目标输出到Secure Agent本地的临时csv文件,运行后会自动生成所有待加载Excel的路径清单,不需要手动维护filelist.txt。 - 步骤2:创建单文件加载子任务
新建File Ingestion Task,源类型选择「Single File」,源文件路径配置为任务输入参数$input.target_file_path,目标端选择S3连接,配置好目标存储桶路径,关闭所有schema校验、文件格式解析开关,加载模式选择二进制原样传输(不要选Excel解析模式,避免强制对齐不同文件的列结构导致加载失败),该模式会把原Excel文件完整上传到S3,保留原始文件的所有内容和格式。 - 步骤3:编排Taskflow逻辑
- 首先拖入步骤1创建的文件清单生成任务,配置运行后输出的临时csv路径为下游节点的输入源。
- 拖入For Each循环组件,循环遍历的数据集选择临时csv中存储的
file_full_path字段集合。 - 在For Each循环内部拖入步骤2创建的单文件加载子任务,将循环当前遍历到的路径值,赋值给子任务的
$input.target_file_path输入参数。 - 循环节点后追加一个本地临时文件清理步骤,删除步骤1生成的临时路径清单csv即可。
- 调优注意事项:
- For Each节点的并发数可根据Secure Agent性能和NAS读带宽调整,默认单线程顺序加载,调整到3-5并发可明显提升加载速度,不建议超过10并发避免触发NAS限流。
- 子任务配置单文件失败重试规则,单个文件加载失败时记录失败路径到错误日志表,不中断整个循环流程,任务跑完后统一补传失败文件即可。
- 如果需要在S3侧保留NAS的原目录结构,生成文件清单时额外提取文件的相对路径字段,作为子任务的S3目标路径参数动态传入即可。
内容的提问来源于stack exchange,提问作者biggboss2019
相关产品推荐
相关产品推荐

