如何在ADF Dataflow派生列中动态提取复杂数组的倒数第二个元素
在Azure Data Factory Dataflow派生列中提取动态数组的倒数第二个元素
核心思路
由于Ranks是包含动态键的对象,无法硬编码指定键名,只需两步即可实现需求:
- 遍历
Ranks的所有键值对,对每个数组提取目标元素 - 将处理后的结果重新组织为与原结构一致的键值对象
派生列表达式
直接使用mapObject函数即可完成处理,无需额外转换数组结构:
mapObject(Ranks, (val, key) => elementAt(val, size(val) - 2))
函数说明
mapObject(Ranks, (val, key) => ...):遍历Ranks对象的每一组键值对,val代表当前键对应的数组,key代表当前键名,对每个数组执行自定义逻辑后返回新的键值对size(val):获取当前数组的总长度elementAt(val, size(val)-2):数组索引从0开始,最后一个元素的索引为size(val)-1,因此倒数第二个元素的索引是size(val)-2,通过elementAt提取该位置的元素
针对示例的验证(按倒数第二个元素逻辑)
- 对于
3760901的数组,长度为8,提取索引6的元素为5713354 - 对于
21377132011的数组,长度为8,提取索引6的元素为6580356 - 对于
9000000000000000000的数组,长度为10,提取索引8的元素为6580216
若需匹配示例中的目标值(排除最后一个-1后的倒数第二个有效元素)
如果实际需求是提取最后一个-1之前的倒数第二个元素(即示例中的5712962、3212、10031),说明数组是[id, rank, id, rank,...,-1]的成对结构,可使用以下表达式:
mapObject(Ranks, (val, key) => { let filteredArr = slice(val, 0, size(val)-1); return elementAt(filteredArr, size(filteredArr)-2); })
slice(val, 0, size(val)-1):移除数组最后一个元素-1,得到过滤后的有效数组- 对过滤后的数组提取倒数第二个元素,即可得到示例中的目标值
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

