寻求Synapse Analytics Pipeline条件表达式协助:按CSV文件名分表加载
问题分析与解决方案
错误点排查
- 文件名前缀匹配错误:表达式中误用了
net_new_commission,但目标文件名前缀是gross_new_charges,完全不匹配规则 - 正则匹配函数误用:
contains()仅用于检查字符串是否包含指定子串,不支持正则表达式,需改用matchesPattern()实现正则匹配 - 日期提取索引错误:
substring()的起始位置计算错误,导致无法正确提取文件名中的日期部分 - 正则未转义特殊字符:
.csv中的.是正则通配符,需转义为\.csv才能精确匹配文件后缀
修正后的表达式
@and(matchesPattern(item().name, '^gross_new_charges_202\\d-\\d{2}-\\d{2}\\.csv$'), greaterOrEquals(concat(substring(item().name, 18, 4), substring(item().name, 23, 2), substring(item().name, 26, 2)), '20221105'))
表达式说明
正则匹配部分:
matchesPattern(item().name, '^gross_new_charges_202\\d-\\d{2}-\\d{2}\\.csv$')^:匹配文件名开头gross_new_charges_202\\d:匹配前缀为gross_new_charges_202后跟任意数字(覆盖2020-2029年的文件)-\\d{2}-\\d{2}:匹配-XX-XX格式的月日\\.csv$:精确匹配.csv后缀并结束匹配
日期比较部分:
greaterOrEquals(concat(substring(item().name, 18, 4), substring(item().name, 23, 2), substring(item().name, 26, 2)), '20221105')substring(item().name, 18, 4):从第19位(索引从0开始)提取4位年份(如2022)substring(item().name, 23, 2):提取2位月份(如11)substring(item().name, 26, 2):提取2位日期(如05)concat()将年月日拼接为YYYYMMDD格式字符串,再与20221105做大于等于比较
验证建议
- 在Synapse管道的表达式编辑器中,使用
Test功能输入测试文件名(如gross_new_charges_2022-11-05.csv、gross_new_charges_2022-10-30.csv)验证表达式返回结果 - 可添加
Set Variable活动,输出item().name和提取的日期字符串,确认索引提取是否正确
内容的提问来源于stack exchange,提问作者datainstints
相关产品推荐
相关产品推荐

