如何从ADLS读取最新命名文件并加载至SQL?现有方法异常排查
以下是你当前实现逻辑中可能导致结果不符合预期的几个关键点,逐一排查:
文件名日期提取逻辑错误
使用Substring提取日期时,要确保起始索引和长度匹配文件名的日期位置。比如如果日期是文件名最后6位(如xxxx_202211),正确的表达式应该是Substring(item().name, length(item().name)-6, 6)。如果前缀长度不固定却用了固定起始索引,就会提取到错误的日期片段。
验证方法:在Set Variable活动中临时输出提取到的日期值,或者在If活动里添加日志,确认提取结果是否符合预期。变量更新的并发冲突
For Each循环默认是并行执行的,多个迭代同时修改存储最新日期的变量,会导致变量值被随机覆盖,最终得到错误的最新值。另外,如果变量初始值设置不合理(比如空字符串、早于所有文件的无效日期),也会导致第一次比较逻辑失效。
解决:把For Each的并行度改为1;初始化变量时设一个极小的有效日期值(比如'190001'),确保第一个文件的日期能正常覆盖初始值。条件比较的类型不匹配
使用Greater函数时,必须保证比较的两边类型一致。比如提取的日期是字符串类型,而参考变量是整数类型,Greater('202211', 202210)的比较结果可能不符合预期。
修正:将两边统一类型后再比较,比如用int(Substring(item().name, length(item().name)-6, 6))把提取的日期转成整数,再和同样是整数类型的参考变量比较。预复制脚本的执行问题
不要忽略预复制脚本的潜在错误:比如脚本中的SQL语句没有正确匹配目标表中对应文件的数据(比如只匹配日期部分导致误删其他数据),或者脚本执行失败(语法错误、权限问题),导致重复数据加载,让你误以为是最新文件筛选逻辑出错。
验证:单独执行预复制脚本,检查目标表数据是否被正确删除;查看复制活动的执行日志,确认预复制脚本的执行状态。Get Metadata的子项范围遗漏
检查Get Metadata活动是否正确获取了目标路径下的所有文件:比如容器、路径配置错误,或者过滤掉了需要的文件(如临时文件、隐藏文件)。如果子项列表里没有包含最新的目标文件,循环自然无法选中它。
验证:查看Get Metadata活动的输出结果,确认子项列表中存在你需要的最新文件。
内容的提问来源于stack exchange,提问作者Aman

