ADF动态内容如何提取全局参数固定前缀后的任意长度字符串
ADF跨环境数据仓库任务名拼接通用方案
原有表达式的问题
- 第一版
split写法未读取拆分后的数组元素,直接传入数组对象会导致拼接结果不符合预期 - 第二版硬编码截取起始索引为8的写法,仅能适配当前
JERICHO_前缀长度,可读性差,若后续前缀规则调整会直接失效
推荐标准实现
使用split函数按固定前缀分割字符串后提取后缀段,完全不受前缀后内容长度、是否包含额外下划线的影响,适配所有环境的命名规则,动态内容表达式如下:
@{concat(split(string(pipeline().globalParameters.DATABASE), 'JERICHO_')[1], ' Data Warehouse Load ', substring(utcNow(),0,10))}
执行逻辑
- 将全局参数
DATABASE转为字符串类型,按固定公共前缀JERICHO_做分割:由于前缀固定在字符串起始位置,分割后返回的数组第一个元素为空字符串,索引为1的第二个元素就是前缀后的全部内容,无论后续内容长度多少、是否包含其他下划线都能完整提取 - 按顺序拼接三部分内容:提取到的环境后缀、固定任务标识
Data Warehouse Load、UTC时间前10位(即yyyy-MM-dd格式的执行日期)
可选高兼容写法
如果后续存在公共前缀调整可能、但始终保持无下划线前缀标识_后缀的命名规则,可以使用indexOf定位第一个下划线位置做动态截取,无需硬编码前缀值:
@{concat(substring(string(pipeline().globalParameters.DATABASE), indexOf(string(pipeline().globalParameters.DATABASE), '_')+1), ' Data Warehouse Load ', substring(utcNow(),0,10))}
该写法会自动定位字符串中第一个下划线的位置,从下划线后一位开始截取全部后缀内容,只要前缀本身不包含下划线即可正常运行。
内容的提问来源于stack exchange,提问作者Christopher McHugh
相关产品推荐
相关产品推荐

