Azure Data Factory数据流中Dataverse源过滤无数据问题咨询
问题场景
在Azure Data Factory数据流中,针对Dataverse的ptl_matter表配置了如下过滤表达式:
and( ptl_partner == '024D96D0-EF1A-4CD9-9C51-D4D53BEE69D3', statuscode == 2 )
执行数据流后无数据输出,但执行逻辑完全一致的SQL查询能返回54条数据:
select * from ptl_matter m where m.ptl_partner = '024D96D0-EF1A-4CD9-9C51-D4D53BEE69D3' and statuscode = 2
移除过滤条件后数据流可正常读取数据,已排除其他环节问题。涉及列类型:ptl_matterid、ptl_partner、fay_globalid为uniqueidentifier,statuscode为int(选项值)。
可能的原因及解决方法
GUID字符串大小写不匹配
Dataverse中uniqueidentifier类型的存储可能区分大小写,ADF数据流的表达式引擎对字符串比较是严格区分大小写的,但SQL查询通常不区分。如果Dataverse中存储的GUID是小写格式,用大写字符串匹配就会无结果。
解决:将过滤的GUID转为小写,或用lower()函数统一转换后比较:and( lower(ptl_partner) == '024d96d0-ef1a-4cd9-9c51-d4d53bee69d3', statuscode == 2 )过滤条件未推送到Dataverse源端执行
ADF数据流处理Dataverse数据源时,部分过滤逻辑可能无法自动推送到源端,而是在ADF本地进行过滤。若源数据存在类型转换差异,会导致本地过滤无匹配。
解决:- 检查数据源设置,确保启用“将过滤器推送到源”选项;
- 改用Dataverse的FetchXML作为数据源查询语句,替代数据流中的过滤表达式:
<fetch> <entity name="ptl_matter"> <filter type="and"> <condition attribute="ptl_partner" operator="eq" value="024D96D0-EF1A-4CD9-9C51-D4D53BEE69D3" /> <condition attribute="statuscode" operator="eq" value="2" /> </filter> </entity> </fetch>元数据同步延迟
若Dataverse表结构或列属性近期有变更,ADF可能未及时同步元数据,导致过滤时列类型或属性不匹配。
解决:在ADF的Dataverse数据源页面点击“刷新”按钮,重新同步元数据后再测试。Statuscode值验证
虽然SQL中statuscode=2有效,但可在ADF数据流的列预览中确认statuscode的实际值是否与SQL查询一致,排除数据流中列映射或值读取异常的情况。
内容的提问来源于stack exchange,提问作者GalaxyWolf

