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

Fabric中如何迭代动态调用OData API并传递认证参数?

解决方案:Fabric中动态迭代OData URL并处理数据

针对你的场景,这里提供3种可行的实现方案,覆盖Dataflow参数化、Notebook灵活处理两种核心路径:

方案1:Dataflow Gen2参数化 + 管道For Each迭代

利用Dataflow的参数功能接收管道传递的动态URL,结合管道的循环活动实现批量处理:

  1. 配置Dataflow Gen2参数

    • 打开目标Dataflow Gen2进入编辑模式,点击右上角「参数」按钮,新建字符串类型参数(例如SourceODataURL)。
    • 在OData数据源配置中,将固定URL替换为参数引用:#parameters.SourceODataURL。
    • 保持Organizational Account认证配置不变,完成数据筛选逻辑(筛选需要的表/字段),并配置写入Lakehouse的目标表,保存Dataflow。
  2. 搭建Fabric管道实现迭代

    • 创建管道级数组参数ODataURLList,填入所有需要迭代的OData URL。
    • 添加「For Each」活动,将迭代项设置为@pipeline().parameters.ODataURLList。
    • 在For Each内部添加「Execute Dataflow」活动,选择刚才配置好的Dataflow Gen2,在参数映射中把SourceODataURL的值设为@item()(当前循环的URL)。
    • 若需要导出JSON文件,可在Dataflow中添加「导出到JSON」活动,或在管道后续添加Copy活动,从Lakehouse读取数据导出为JSON。

方案2:Fabric Notebook(PySpark)灵活处理

Notebook支持动态逻辑编写,可直接处理批量URL并完成认证、数据筛选、输出:

import requests
import pandas as pd
from pyspark.sql import SparkSession

# 1. 获取Organizational Account认证令牌(替换为OData API的资源ID)
token = mssparkutils.credentials.getToken("https://your-odata-api-resource.com")
headers = {"Authorization": f"Bearer {token}", "Accept": "application/json"}

# 2. 定义要迭代的URL列表(可从Lakehouse表读取,实现动态配置)
url_list = [
    "https://api.example.com/odata/Entity1",
    "https://api.example.com/odata/Entity2",
    # 添加更多URL
]

# 3. 循环处理每个URL
for url in url_list:
    # 请求OData API
    response = requests.get(url, headers=headers)
    response.raise_for_status()  # 捕获请求错误
    odata_data = response.json()
    
    # 转换为Spark DataFrame
    df = spark.createDataFrame(pd.DataFrame(odata_data.get("value", [])))
    
    # 筛选需要的字段/行(示例:保留指定列)
    filtered_df = df.select("Id", "Name", "CreatedDate")
    
    # 写入Lakehouse表(追加模式)
    filtered_df.write.mode("append").saveAsTable("LakehouseName.dbo.TargetTable")
    
    # 导出为JSON文件(写入OneLake路径)
    filtered_df.write.mode("overwrite").json("abfss://workspaceid@onelake.dfs.fabric.microsoft.com/LakehouseName.Lakehouse/Files/Output/json_output_" + url.split("/")[-1] + ".json")
  • 注意:mssparkutils.credentials.getToken的参数需替换为OData API对应的资源标识符,若不确定可联系API管理员确认。
  • 若URL列表需要动态维护,可将URL存储在Lakehouse的一张配置表中,通过Spark读取该表获取url_list。

方案3:Dataflow Gen2内置循环(适合简单场景)

如果URL数量较少,可直接在Dataflow中实现循环逻辑:

  • 新建一个包含所有URL的表(可手动输入或从Lakehouse读取)。
  • 使用Dataflow的「添加列」活动,为每行URL添加自定义函数,调用OData数据源并返回处理后的结果。
  • 展开结果列,筛选需要的数据后写入目标存储。

内容的提问来源于stack exchange,提问作者Mamidi Lakshmi Prasanna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:40:11