ADF数据流中基于多条件生成字符串数组的派生列问题
Azure Data Factory 数据流派生列解决方案
步骤1:给数据流添加管道类型参数
先在数据流里新增一个字符串类型的参数,比如pipelineType。然后在调用数据流的两个管道里,分别给这个参数传值:
- 每日执行的管道:传
'daily' - 每月第一个工作日执行的管道:传
'monthly'
步骤2:编写派生列表达式
在派生列Frequency里用以下嵌套条件表达式,注意条件顺序要从最严格的开始判断(先判断是否是当月最后一个周五,再判断是否是周五,最后判断普通工作日):
iif($pipelineType == 'monthly', 'monthly', iif( // 判断是否是当月最后一个周五 dayOfWeek(lastDayOfMonth(DataRef)) <= 5 ? lastDayOfMonth(DataRef) - (dayOfWeek(lastDayOfMonth(DataRef)) - 5) : lastDayOfMonth(DataRef) - (dayOfWeek(lastDayOfMonth(DataRef)) + 2) == DataRef, 'daily | weekly | monthly', iif( // 判断是否是周五(ADF中dayOfWeek周日=0,周五=5) dayOfWeek(DataRef) == 5, 'daily | weekly', // 普通工作日 'daily' ) ) )
表达式逻辑拆解
- 当月最后一个周五的计算:先取当月最后一天,再根据最后一天的星期数调整:
- 如果最后一天是周五及之前(周数≤5),直接减去(最后一天周数-5)天,得到当月最后一个周五
- 如果最后一天是周六(6)或周日(0),则减去(周数+2)天,比如最后一天是周日(0),减2天就是周五
- 条件顺序必须从特殊到普通,否则会出现前面的条件覆盖后面的情况(比如先判断普通工作日,周五的条件就不会触发)
验证示例
- DataRef为2023-07-14(周五):匹配周五条件,返回
daily | weekly - DataRef为2023-06-30(6月最后一个周五):匹配最后一个周五条件,返回
daily | weekly | monthly - 每日管道中的普通工作日(周一到周四):返回
daily - 每月管道中的所有数据:返回
monthly
内容的提问来源于stack exchange,提问作者fabio.sitzia
相关产品推荐
相关产品推荐

