Azure Data Factory数据流:将Events对象拆分为单独行
解决Azure Data Flow中动态键对象展开问题
针对你遇到的动态键Events对象无法转数组展开的问题,可以通过以下步骤实现需求:
步骤1:添加派生列,将动态键对象转换为结构化数组
在Data Flow中添加派生列转换,创建一个新列(比如命名为EventArray),使用以下表达式将Events对象转换为包含time字段的事件数组:
mapArray( zip(mapKeys(Events), mapValues(Events)), (pair) => merge(pair[1], createMap('time', pair[0])) )
表达式逻辑:
mapKeys(Events):提取Events的所有动态时间键,生成字符串数组mapValues(Events):提取Events的所有事件属性对象,生成对象数组zip(...):将时间键数组和事件对象数组按位置配对,得到[时间字符串, 事件对象]格式的数组mapArray(...):遍历每个配对项,用merge把事件对象和time字段(对应时间键)合并,最终生成每个元素都包含完整事件属性的数组
步骤2:Flatten展开数组为多行
添加Flatten转换,将上一步生成的EventArray列设置为「Unroll by」列,数组中的每个元素会被展开为单独的一行数据。
步骤3:选择并整理输出字段
添加选择转换,保留需要的字段:id、展开后的time、GrossVolume、DipHeight、WaterHeight、IsManual,移除Events和EventArray这类中间列。
步骤4:写入目标Delta表
添加Sink转换,配置目标Delta表的连接信息与存储路径,将处理后的数据写入即可。
最终效果示例
处理后的数据格式与你要求的一致:
{ "id": "20221230", "time": "2022-12-30T22:01:00", "GrossVolume": 16888.67, "DipHeight": 1562.28, "WaterHeight": 0, "IsManual": false }
内容的提问来源于stack exchange,提问作者Joshua
相关产品推荐
相关产品推荐

