You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ADF数据流主Kusto查询的Where子句中使用另一Kusto源输出?

解决方案:在主Kusto查询的Where子句中引用另一Kusto源的结果

完全可以实现,且能避免lookup/join带来的内存溢出问题,推荐两种高效方案:

方案1:Kusto原生子查询(最推荐)

直接在主Kusto查询中嵌入子查询,让Kusto引擎自行处理过滤逻辑,所有操作都在Kusto端完成,不需要ADF做中间数据处理。

修改后的主查询示例:

Table
| project column1, column2, column3
| where SubscriptionId in (
    // 从CPCDevices源获取需要的订阅ID列表
    CPCDevices
    | project SubscriptionId
    | summarize distinct(SubscriptionId) // 去重避免重复值
)
// 后续查询逻辑...

这种方式的优势是Kusto会自动优化查询计划,将子查询的结果作为过滤条件直接应用在主表扫描阶段,避免全表加载后再过滤,性能和内存占用都更优。

方案2:ADF数据流参数传递

如果你需要通过ADF数据流来传递订阅ID列表,可按以下步骤配置:

  1. 处理CPCDevices源输出:
    • 在CPCDevices源后添加聚合转换,选择「不分组」,添加聚合列SubIdArray,使用表达式collect_list(tostring(SubscriptionId)),将所有订阅ID收集为字符串数组。
    • 再添加派生列转换,生成适合Kusto in语法的格式,比如用表达式strcat("(", strcat_array(SubIdArray, ","), ")"),得到类似("sub-xxx","sub-yyy")的字符串。
    • 添加缓存接收器,将处理后的结果缓存到数据流中。
  2. 配置主Kusto源:
    • 在主Kusto源的查询中,将Where子句改为:
      Table
      | project column1, column2, column3
      | where SubscriptionId in {SubIdParam}
      // 后续查询逻辑...
      
    • 在源的参数设置中,添加参数SubIdParam,绑定到缓存中的派生列值。

关键注意事项

  • 若用参数传递方式,务必确保生成的字符串格式符合Kusto语法:字符串类型的订阅ID需要包裹双引号,数字类型则不需要。
  • 优先选择方案1,因为它完全利用Kusto的查询优化能力,避免ADF端处理大量数据,从根源上杜绝内存溢出风险。

内容的提问来源于stack exchange,提问作者Guilherme Matheus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:48:26