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

基于Azure Data Factory V2的分页数据获取与转换技术咨询

嘿,我来帮你把这个分页获取+转换的流程理清楚,结合你用的ADF V2和U-SQL,分几个核心部分拆解,都是实操性的步骤:

一、REST API分页数据的ADF获取配置

你的API返回的是嵌套在data数组里的结构,还要处理分页,先按常见的REST分页场景(比如页码/offset、返回next page URL)来配置:

  • 第一步:配置REST链接服务与数据集
    先在ADF里创建REST链接服务,填好API的基础URL、认证方式(比如API Key、OAuth)。然后创建REST数据集,把分页参数做参数化处理——比如如果是页码分页,就在相对URL里写?pageNumber=@pipeline().parameters.pageNumber;如果是offset分页,就写?offset=@pipeline().parameters.offset。

  • 第二步:用Until活动实现循环分页
    因为要一页页取直到没有下一页,用Until活动最适合:

    1. 先初始化几个变量:pageNumber设为1,hasNextPage设为true,如果需要临时存所有数据还可以加allData变量(不过直接追加到ADLS更省内存)。
    2. 把Until活动的终止条件设为@variables('hasNextPage') == false。
    3. 在Until内部:
      • 用复制数据活动,把当前页的REST数据复制到ADLS的临时文件夹,比如路径设为temp/page_@{variables('pageNumber')}.json,注意源的相对URL要用上刚才的分页变量。
      • 接着用查找活动(或者Web活动,看API返回分页信息的方式)检查是否有下一页:比如如果API返回的JSON里带nextPageUrl字段,就用Lookup读取刚生成的JSON文件,提取这个字段;如果是空值,就把hasNextPage设为false,否则更新pageNumber/offset变量,同时把REST数据集的相对URL换成nextPageUrl。
  • 第三步:合并分页JSON(可选)
    如果后续U-SQL想处理单个文件,你可以用ADF的数据流(比复制活动更灵活),用通配符路径读取temp/*.json,然后合并成一个JSON文件写到目标路径。

二、U-SQL把嵌套JSON转CSV

你的JSON是外层包着data数组的结构,U-SQL需要先解析这个嵌套层级,再导出成CSV:

  • 第一步:编写U-SQL脚本
    假设你的源JSON在ADLS的/input/combined_data.json,目标CSV在/output/result.csv,脚本示例如下:

    DECLARE @inputPath string = "/input/combined_data.json";
    DECLARE @outputPath string = "/output/result.csv";
    
    // 读取完整JSON文件内容
    @rawData =
        EXTRACT jsonContent string
        FROM @inputPath
        USING Extractors.Text(delimiter:'\b', quoting:false);
    
    // 解析嵌套的data数组,展开成单行数据
    @parsedData =
        SELECT
            id.Trim('"') AS id,
            name.Trim('"') AS name,
            email.Trim('"') AS email,
            bool.Parse(administrator.Trim('"')) AS administrator
        FROM @rawData
        CROSS APPLY JsonTuple(jsonContent, "data") AS dataWrapper
        CROSS APPLY JsonTuple(dataWrapper.data, "[*].id", "[*].name", "[*].email", "[*].administrator") AS explodedData
        CROSS APPLY Zip(
            SqlArray.Create(explodedData.id.Split(',')),
            SqlArray.Create(explodedData.name.Split(',')),
            SqlArray.Create(explodedData.email.Split(',')),
            SqlArray.Create(explodedData.administrator.Split(','))
        ) AS z(id, name, email, administrator);
    
    // 导出为带表头的CSV
    OUTPUT @parsedData
    TO @outputPath
    USING Outputters.Csv(header:true, quoting:false);
    

    如果是多个分页JSON文件,直接把@inputPath改成/temp/page_*.json即可,U-SQL会自动读取所有匹配的文件。

  • 第二步:在ADF中运行U-SQL脚本
    在管道里添加U-SQL活动,链接到你的Azure Data Lake Analytics账户,可以把脚本存在ADLS里,或者直接在活动里粘贴脚本内容,然后配置好输入(ADLS的JSON路径)和输出(CSV路径)的数据集。

三、几个避坑提醒
  • 特殊分页场景处理:如果你的API是通过响应头的Link字段返回分页信息(比如GitHub API),那在复制数据活动的源设置里,直接启用「分页」,然后配置分页规则,比如AbsoluteUrl: $.nextLink或者从响应头提取Link里的next URL。
  • 大数据量更推荐数据流:如果数据量很大,用ADF数据流替代U-SQL会更高效——用「扁平化」活动展开data数组,然后直接用「接收器」导出为CSV,还不需要依赖Data Lake Analytics账户。
  • 错误处理要跟上:在Until活动里加个「捕获」分支,处理分页失败的情况,比如重试3次,或者把错误日志写到ADLS的日志文件夹里,方便排查问题。

内容的提问来源于stack exchange,提问作者Waqas Idrees

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:43:50