使用ADF抽取Dynamics CRM数据时,如何处理Null值及Lv列缺失问题?
解决ADF抽取Dynamics CRM中含大量Null值列的问题
问题原因
Dynamics CRM的Fetch API在返回结果时,若某列在ADF采样的结果集中全部为Null,会自动省略该字段的返回节点;而ADF默认通过采样结果集生成源列元数据,因此无法识别到lv列,导致映射环节提示源列不存在。
具体解决方法
方法1:关闭自动元数据探测,手动添加列信息
保持现有FetchXML不变,在ADF的Dynamics CRM数据集配置中强制指定lv列:
- 打开Dynamics CRM数据集的「连接」配置页,找到「高级」选项
- 取消勾选「自动探测架构」
- 点击「编辑架构」,手动添加
lv列,设置与CRM中该字段匹配的数据类型(如整数、字符串等) - 配置完成后,ADF会强制保留该列的映射,抽取时会将Null值正常写入目标库。
方法2:临时修改FetchXML,确保采样包含非Null值
在FetchXML中添加过滤条件,让ADF探测元数据时能获取到至少一条lv列非Null的记录:
<fetch> <entity name='numbers'> <attribute name='ref' /> <attribute name='id' /> <attribute name='name' /> <attribute name='createdon' /> <attribute name='modifiedon' /> <attribute name='statecode' /> <attribute name='statuscode' /> <attribute name='lv' /> <!-- 临时过滤出含lv值的记录,用于元数据探测 --> <filter type='and'> <condition attribute='lv' operator='not-null' /> </filter> </entity> </fetch>
- 用这个带过滤的FetchXML完成映射配置,确认
lv列出现在源映射中 - 映射配置完成后,将FetchXML改回无过滤的原始版本,即可正常抽取全量数据,ADF会保留
lv列的映射。
方法3:使用数据流动(Data Flow)处理
若上述方法无效,可改用ADF数据流动实现抽取:
- 在数据流动中,源选择Dynamics CRM并输入目标FetchXML
- 进入「源选项」,开启「允许架构漂移」,并勾选「推断漂移列类型」
- 数据流动会自动识别所有指定列(包括大量为Null的
lv列),直接映射到目标库即可。
额外检查项
确认Dynamics CRM中lv字段的逻辑名称是否正确:FetchXML中使用的必须是字段的逻辑名称(而非显示名称),若名称不匹配也会导致无法识别。可在CRM的解决方案管理器或高级查找中查看字段的逻辑名称。
内容的提问来源于stack exchange,提问作者user19307825
相关产品推荐
相关产品推荐

