反馈已提交

网络繁忙

分页取数-计算总页数并按页取数

  • 文档创建者:Roxy
  • 历史版本:8
  • 最近更新:Roxy 于 2024-09-19
  • 1. 概述

    1.1 应用场景

    某企业现在需要将某业务数据全部取出以供业务分析使用。

    由于数据量比较大,不可能一次性取全量数据,因此需要使用参数。

    接口文档中 pageNum 表示数据页数;pageSize 表示在每一页的数据条数。

    API取数-按页数取数 不同的是,接口返回值中没有总页数 total_pages,需要手动计算。

    1.2 接口说明

    需要取数的 API 接口说明如下:

    请求说明:

    请求方式POST
    ContentTypeapplication/json

    请求body参数:

    名称类型是否必填描述
    pagingpageNumint

    分页参数

    pageNum 为页数,数值可自定义。

    pageSizeintpageSize 为每页数据条数,数值可自定义
    paramsobject

    自定义参数

    请求示例:

    {
    "paging": {
    "pageNum": 1,
    "pageSize": 10
    },
    "params": [{
    "name": "dtime",
    "value": "2010-07-13 00:00:00"
    }]
    }

    返回值参数:

    名称类型描述
    dataobject返回用户使用接口取出的数据
    totalNumint返回取出数据的总数据条数
    pageSizeint返回取出数据的每页数据条数
    pageNumint数据页数,即从第几页开始取
    messagestring

    success,则返回成功

    失败时具体原因会在Messege中体现

    2. 方案一

    以下为 4.1.3 以及之后的版本方案。

    2.1 实现思路

    接口取数时,通常不会一次性取出全量数据,因此使用参数,分批从接口中取出全量数据。

    从接口中获取 pageNum 和 pageSize 返回值,并使用 SparkSQL 计算出数据总页数 total_pages,将其作为参数,也就是需要执行的次数;

    使用分页取数,翻页方式选择「页码」,并设置 ${pageNum}页数参数,首次执行 pageIndex 页码数为 1 ,然后增长间隔为1,递增执行取出每一页的数据,当页数pageNum<=totalpages 继续执行,当页数pageNum>totalpages 时,停止执行。

    2.2 操作步骤

    2.2.1 设置 API 基本信息

    新建一个定时任务,由于需要将 API 数据解析计算后获取总页数值作为参数,因此需要使用「数据转换」节点。

    在数据转换中,选择「API输入」并选择POST请求方式,输入复制的API链接,如下图所示:

    若有认证,则设置认证方式。

    然后在Body 中输入 json 数据,如下图所示:

    示例取出 2010-07-13 00:00:00 之后的数据,因此自定义参数 dtime 的 value 直接写成 2010-07-13 00:00:00,将 pageSize 设置为 10,也就是每页数据限制为 10 条,从第一个开始取数,查看返回值中,每页 10 条数据计算总页数为多少。

    {
    "paging": {
    "pageNum": 1,
    "pageSize": 10
    },
    "params": [{
    "name": "dtime",
    "value": "2010-07-13 00:00:00"
    }]
    }

    解析后的返回值如下图所示:

    2.2.2 获取数据总页数

    使用获取到的 totalNum:返回总数据条数和 pageSize:每页数据条数进行计算,获取总页数。

    使用 SparkSQL 输入如下公式:

    select CEILING(`totalNum`/ `pageSize` ) from API输入

    注:totalNum、pageSize 都需要在输入时选择自动识别出的字段,不能手动输入。

    在数据预览界面就可以看到计算出的总页数,如下图所示:

    使用参数输出,将总页数设置为参数 total_pages ,如下图所示:

    2.2.3 分批取数

    新增数据同步节点,选择 API 数据源后,勾选「分页取数」,设置取数逻辑,分页方式选择「页码」,更新策略为初始值 1 ,增长间隔 1,即按照设置的更新策略从第一页开始递增 ${pageNum}页数参数,从接口取数。该参数即可实现按照页数递增取出所有的数据。如下图所示:

    当页数参数 ${pageNum} 递增到大于等于总页数参数,则${total_pages},则分页结束,如下图所示:

    注:循环容器的条件循环为 do-while 循环,意思是先执行循环体,再判断是否终止循环。示例:假设页数 pageNum>=total_pages 时,停止执行,当 total_pages 为 8,pageNum 也为 8 时,会先执行 pageNum 为 8 的循环,再终止执行。

    在数据同步中写入 API 配置,并设置参数名:pageSize,参数值:10,pageNum 使用分页参数 ${pageNum} ,也就是按照每页 10 条数据,从第一页开始递增从接口取数,如下图所示:

    注:此处为了保证总页数一致,设置的 pageSize 需要与 2.2.2 节相同。

    由于返回值为 JSON 格式,可以使用 JSON 格式取出指定的数据,如下图所示:

    在数据去向中设置指定的输出数据库以及数据表,如下图所示:

    2.2.4 效果查看

    保存并运行任务后,此时在数据库中即可取出全部工单数据,如下图所示:

    14.png

    3. 方案二

    以下为 4.1.3 之前的版本方案。

    3.1 实现思路

    接口取数时,通常不会一次性取出全量数据,因此使用参数,分批从接口中取出全量数据。

    从接口中获取 pageNum 和 pageSize 返回值,并使用 SparkSQL 计算出数据总页数 total_pages,将其作为参数,也就是需要执行的次数;

    使用循环容器和内置参数 loopTimes,首次执行 pageNum 页码数为 1 ,然后递增执行取出每一页的数据,当循环次数 loopTimes<=total_pages 继续执行,当循环次数 loopTimes>total_pages 时,停止执行。

    FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 「API取数-计算总页数并按页取数」。

    3.2 操作步骤

    3.2.1 设置 API 基本信息

    新建一个定时任务,由于需要将 API 数据解析计算后获取总页数值作为参数,因此需要使用「数据转换」节点。

    在数据转换中,选择「API输入」并选择POST请求方式,输入复制的API链接,如下图所示:

    若有认证,则设置认证方式。

    然后在Body 中输入 json 数据,如下图所示:

    示例取出 2010-07-13 00:00:00 之后的数据,因此自定义参数 dtime 的 value 直接写成 2010-07-13 00:00:00,将 pageSize 设置为 10,也就是每页数据限制为 10 条,从第一个开始取数,查看返回值中,每页 10 条数据计算总页数为多少。

    {
    "paging": {
    "pageNum": 1,
    "pageSize": 10
    },
    "params": [{
    "name": "dtime",
    "value": "2010-07-13 00:00:00"
    }]
    }

    解析后的返回值如下图所示:

    3.2.2 获取数据总页数

    使用获取到的 totalNum:返回总数据条数和 pageSize:每页数据条数进行计算,获取总页数。

    使用 SparkSQL 输入如下公式:

    select CEILING(`totalNum`/ `pageSize` ) from API输入

    注:totalNum、pageSize 都需要在输入时选择自动识别出的字段,不能手动输入。

    在数据预览界面就可以看到计算出的总页数,如下图所示:

    使用参数输出,将总页数设置为参数 total_pages ,如下图所示:

    3.2.3 分批取数

    由于需要进行页数分批取出所有数据,因此使用循环容器功能。

    保存数据转换节点设置后,进入任务开发界面,拖入循环容器节点,然后再拖入数据同步节点至循环容器中,与上游的数据转换相连,如下图所示:

    在数据同步中仍然进行 API 取数的设置,如下图所示:

    loopTimes 为循环容器内置参数,容器内当前循环次数,初次为 1 ,后续每次循环递增加。该参数即可实现按照页数递增取出所有的数据。

    在 Body 中设置 pageSize:10,pageNum 使用内置参数${loopTimes},也就是按照每页 10 条数据,从第一页开始递增从接口取数,如下图所示:

    由于返回值为 JSON 格式,可以使用 JSON 格式取出指定的数据,如下图所示:

    在数据去向中设置指定的输出数据库以及数据表,如下图所示:

    点击循环容器节点,设置循环次数,并设置循环方式为「条件循环」,点击配置条件为 loopTimes<=${total_pages},如下图所示:

    此时即可实现当递增的页数大于总页数时,跳出循环停止执行,从而取出所有的数据。

    3.2.4 效果查看

    执行任务后,即可在数据库中查看到取出的数据,如下图所示:

    14.png




    附件列表


    主题: 数据开发-定时任务
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持