如何通过ADF将含复杂数组的CSV转为JSON并更新Cosmos DB
问题描述
我有如下格式的CSV文件(使用^作为分隔符):
damNo^modelVersion2^mileageUnit^oemOrderNumber^warrantyStartDate^mchCode^saCodes DAM123456^2A^KM^OEM987654^2005-05-12T00:00:00^MCH001^1;Versjon 1~UKJENT;Interiør ukjent~UKJENT;Farge ukjent
其中saCodes为复杂数组格式,需要通过Azure Data Factory(ADF)生成如下结构的JSON:
{"damNo":"DAM123456","modelVersion2":"2A","mileageUnit":"KM","oemOrderNumber":"OEM987654","warrantyStartDate":"2005-05-12T00:00:00","mchCode":"MCH001","saCodes":[{"propertyId":"1","description":"Versjon 1"},{"propertyId":"UKJENT","description":"Interiør ukjent"},{"propertyId":"UKJENT","description":"Farge ukjent"}]}
最终目的是用该JSON更新Cosmos DB,请问是否可通过ADF实现该流程?
实现方案
完全可以通过ADF实现这个流程,核心是利用**数据流(Data Flow)**处理saCodes字段的拆分与重组,具体步骤如下:
- 数据源配置:创建CSV数据集,指定分隔符为
^,确保所有字段(包括saCodes)被正确读取。 - 数据流处理
saCodes字段:- 拆分数组元素:添加「派生列」转换,用
split(saCodes, '~')将saCodes拆分为字符串数组,得到类似["1;Versjon 1", "UKJENT;Interiør ukjent", "UKJENT;Farge ukjent"]的结果。 - 展开数组:添加「拆分行」转换,以上一步生成的数组为依据,将每个数组元素拆分为单独的行。
- 拆分键值对:再次添加「派生列」转换,用
split(currentValue, ';')拆分每行的字符串,分别提取propertyId(数组第1个元素)和description(数组第2个元素)。 - 重组数组:添加「聚合」转换,以
damNo等非saCodes相关字段为分组键,用collect(@(propertyId=propertyId, description=description))将拆分后的键值对重新聚合成saCodes数组。
- 拆分数组元素:添加「派生列」转换,用
- 输出到Cosmos DB:创建Cosmos DB数据集并选择JSON格式作为输出,在数据流的「接收器」中配置该数据集,设置写入行为为「更新」(依据
damNo等主键匹配更新),运行管道即可完成转换与更新操作。
内容的提问来源于stack exchange,提问作者moderator
相关产品推荐
相关产品推荐

