SSIS中如何过滤OData源指定根节点的所有后代行?
解决SSIS中过滤指定根节点所有后代的问题
可以实现,分两种场景处理:
一、OData服务支持递归查询时(推荐)
如果你的OData服务支持OData v4的递归语法,直接在OData源的查询中完成过滤:
- 先查询目标根节点的Id:
$filter=Name eq '你的根节点名称'&$select=Id - 用递归语法获取该根节点的所有后代Id(不同OData服务语法可能略有差异,比如部分服务用
$recursive或$expand的递归模式) - 在最终的OData查询中排除这些Id:
$filter=Id not in (递归获取的后代Id集合)
如果要参数化根节点名称,直接把查询中的字符串替换为SSIS参数即可。
二、OData服务不支持递归查询时
在SSIS数据流内处理:
- 第一步:将OData源的所有数据加载到临时存储(比如数据库临时表或SSIS的内存临时表)
- 第二步:用脚本组件编写递归逻辑,传入目标根节点名称,先找到其对应的Id,再逐层遍历所有子节点、孙节点,收集所有后代的Id集合
- 第三步:用条件拆分转换,将Id属于上述集合的行过滤掉,保留剩余行
内容的提问来源于stack exchange,提问作者Luiso
相关产品推荐
相关产品推荐

