Azure Data Factory数据流中解析数组为列的实现方案咨询
解决custom_checks数组映射到固定列的数据流方案
针对你遇到的custom_checks数组顺序随机、需要映射到固定数据库列的问题,不用Flatten或者字符串查找,直接在派生列转换里用数组筛选函数就能搞定,具体方案如下:
核心逻辑
利用数据流的数组处理函数,根据custom_type的固定值精准匹配对应的Type_value,不管数组元素顺序如何,都能直接提取对应值到目标列。
派生列表达式(按目标列分别配置)
针对四个目标列,分别创建派生列,使用以下表达式:
区域列(对应custom_type=998)
first(filter(custom_checks, item()?.custom_type == 998))?.Type_value ?? ''
车辆列(对应custom_type=4466)
first(filter(custom_checks, item()?.custom_type == 4466))?.Type_value ?? ''
移动设备列(对应custom_type=3356)
first(filter(custom_checks, item()?.custom_type == 3356))?.Type_value ?? ''
子区域列(对应custom_type=2311)
first(filter(custom_checks, item()?.custom_type == 2311))?.Type_value ?? ''
表达式说明
filter(custom_checks, item()?.custom_type == X):遍历custom_checks数组,筛选出custom_type等于目标值的元素集合first(...):取筛选结果的第一个元素(因为每个custom_type唯一,结果要么是单个元素要么为空)?.Type_value:安全访问元素的Type_value属性,避免找不到元素时抛出空值错误?? '':如果筛选结果为空,就用空字符串填充;如果需要存入null,直接去掉?? ''即可
操作步骤
- 在你的数据流中添加派生列转换节点
- 依次创建四个派生列,对应上述四个表达式,列名设为你数据库中的目标列名(如“区域”、“车辆”等)
- 后续转换或入库环节,直接使用这些派生列即可,无需保留原custom_checks数组列
为什么不用Flatten?
Flatten会把数组拆分成多行,之后还需要按ID进行聚合才能合并回单行数据,步骤繁琐且效率更低;而直接用派生列筛选的方式,一步就能完成单行内的字段映射,更高效简洁。
内容的提问来源于stack exchange,提问作者koolhyd
相关产品推荐
相关产品推荐

