数据ETL转换与更新在轻易云上的实现

  • 轻易云集成顾问-吕修远
### 吉客云·奇门数据集成到轻易云平台:更新退货结算时间 在实际的业务场景中,数据集成往往是企业数字化运营的重要一环。本文将分享一个基于吉客云·奇门API与轻易云数据集成平台的具体对接案例——更新退货结算时间。在这个过程中,我们采用了高性能的数据写入和实时监控等技术手段,确保了数据处理的准确性和高效性。 本次项目主要涉及两个关键API接口:吉客云·奇门获取数据的`jackyun.tradenotsensitiveinfos.list.get`接口,以及轻易云用于写入数据的`UpdateStrategyData`接口。我们通过这两个接口实现了从订单抓取到系统同步的一整套流程,重点解决了多个技术难题,比如分页处理、限流控制以及异常重试机制等。 为适应特定业务需求,本次方案应用了自定义的数据转换逻辑,以解决吉客云与轻易云之间的数据格式差异。此外,通过集中化监控和告警系统,我们能够实时追踪每个任务节点的状态及性能,对可能出现的问题进行快速响应。借助可视化的数据流设计工具,我们简化了复杂流程,使得整个对接过程更加直观和可管理。 总之,此次集成不仅提升了大量订单信息快速而精准地被导入至目标系统,同时也增强了整体操作透明度,为后续业务优化提供坚实基础。接下来我们会详细探讨具体实施细节,包括如何调用相关API、处理分页问题及避免漏单等复杂挑战。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用吉客云·奇门接口获取并加工数据 在数据集成的生命周期中,调用源系统接口获取原始数据是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用吉客云·奇门接口 `jackyun.tradenotsensitiveinfos.list.get` 获取并加工数据。 #### 接口配置与请求参数 在轻易云数据集成平台中,我们需要配置元数据以便正确调用吉客云·奇门的接口。以下是元数据配置的关键部分: ```json { "api": "jackyun.tradenotsensitiveinfos.list.get", "effect": "QUERY", "method": "POST", "number": "tradeNo", "id": "tradeNo", "idCheck": true, "formatResponse": [ {"old": "consignTime", "new": "consignDate", "format": "date"} ], ... } ``` - **api**: 指定了要调用的API接口。 - **effect**: 定义了操作类型,这里是查询操作。 - **method**: 请求方法为POST。 - **number**和**id**: 用于标识记录的唯一字段。 - **idCheck**: 启用ID检查,确保每条记录唯一。 #### 请求参数设置 请求参数用于定义API调用时所需的具体信息: ```json { "request": [ {"field": "pageSize", "label": "分页页数", "type": "int", "value": "200"}, {"field": "startConsignTime", "label": "发货时间(起始)", "type": "datetime", "value": "_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')"}, {"field": "endConsignTime", "label": "发货时间(结束)", "type": "datetime", "value": "_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')"}, {"field": "fields", ... }, {"field": "tradeType", ... }, ... ] } ``` - **pageSize**: 每页返回的数据条数,设为200。 - **startConsignTime**和**endConsignTime**: 定义了查询时间范围,通过函数计算得到具体时间值。 - **fields**: 指定返回的字段列表,包括仓库代码、删除状态、仓库名称等。 #### 数据格式化与转换 为了确保数据的一致性和可读性,我们需要对返回的数据进行格式化处理: ```json { ... "formatResponse":[ {"old":"consignTime","new":"consignDate","format":"date"} ], ... } ``` 这里将 `consignTime` 字段转换为 `consignDate`,并将其格式化为日期类型。这一步骤确保了后续处理环节中的数据一致性。 #### 条件过滤与自动填充 为了筛选出符合条件的数据,我们可以设置条件过滤: ```json { ... "condition":[ [{"field":"tradeStatus","logic":"egt","value":"6000"}] ] } ``` 这个条件表示只获取交易状态大于或等于6000的记录。此外,自动填充功能可以简化后续处理步骤: ```json { ... "autoFillResponse": true, ... } ``` 启用自动填充后,平台会根据预定义规则自动补全响应数据中的缺失字段。 #### 异常处理与补救措施 在实际操作中,可能会遇到各种异常情况。为了保证数据完整性,可以配置异常补救机制: ```json { ... omissionRemedy:{ crontab:"0 0 * * *", takeOverRequest:[ { field:"startConsignTime", value:"_function FROM_UNIXTIME( unix_timestamp() -604800 , '%Y-%m-%d %H:%i:%s' )", type:"string" }, { field:"endConsignTime", value:"_function FROM_UNIXTIME( unix_timestamp() -86400 , '%Y-%m-%d %H:%i:%s' )", type:"string" } ] } } ``` 通过定时任务(crontab)和接管请求参数,可以在出现异常时自动重新拉取一周内的数据,确保不会遗漏任何重要信息。 综上所述,通过合理配置元数据和请求参数,并结合格式化、条件过滤及异常处理机制,可以高效地使用轻易云数据集成平台调用吉客云·奇门接口获取并加工所需的数据。这不仅提高了数据处理的效率,也保证了业务流程的连续性和可靠性。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/S2.png~tplv-syqr462i7n-qeasy.image) ### 更新退货结算时间的ETL转换与写入 在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL转换,转为目标平台所能接收的格式,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台的API接口,实现这一过程。 #### API接口配置 我们使用的API接口是`UpdateStrategyData`,该接口通过POST方法执行数据更新操作。以下是元数据配置的详细内容: - **API名称**: `UpdateStrategyData` - **执行效果**: `EXECUTE` - **请求方法**: `POST` - **ID检查**: `true` #### 请求参数解析 1. **updateKeys** - 字段名:`updateKeys` - 标签:`updateKeys` - 类型:`string` - 值:`customerCode,settlementDate` 2. **updateValues** - 字段名:`updateValues` - 标签:`updateValues` - 类型:`string` - 值:`{shopCode},{consignMonth}` 3. **updateTypes** - 字段名:`updateTypes` - 标签:`updateTypes` - 类型:`string` - 值:`string,string` 4. **otherRequest** 1. **strategy_id** - 字段名:`strategy_id` - 标签:`目标方案ID` - 类型:`string` - 值:`87b0d8cc-68ce-3bbf-8381-8dffe9fefe8a` 2. **whereKeys** - 字段名:`whereKeys` - 标签:`whereKeys` - 类型:`string` - 值:`content.logisticNo` 3. **whereValues** - 字段名:`whereValues` - 标签:`whereValues` - 类型:`string` - 值: `_function CONCAT('{mainPostid}', '-1')` 4. **whereType** - 字段名: `whereType` - 标签: `whereType` - 类型: `string` - 值: `string` #### 数据转换与写入流程 1. **数据请求与清洗** 首先,我们从源平台获取原始数据,并进行必要的数据清洗和预处理。这一步确保了数据质量和一致性,为后续的ETL转换奠定基础。 2. **ETL转换** 在ETL(Extract, Transform, Load)过程中,主要涉及以下几步: - **提取(Extract)**: 从源系统中提取需要的数据字段,如客户代码(customerCode)、结算日期(settlementDate)等。 - **转换(Transform)**: 根据业务需求,将提取的数据字段转换为目标平台所能接收的格式。例如,将原始数据中的店铺代码(shopCode)和发货月份(consignMonth)映射到目标字段。 ```json { "updateKeys": "customerCode,settlementDate", "updateValues": "{shopCode},{consignMonth}", "updateTypes": "string,string" } ``` - **加载(Load)**: 将转换后的数据通过API接口写入目标平台。在这里,我们使用POST方法调用API接口,并传递相应的参数。 3. **条件更新** 为了确保只更新特定记录,我们使用了条件过滤参数: ```json { "whereKeys": "content.logisticNo", "whereValues": "_function CONCAT('{mainPostid}', '-1')", "whereType": "string" } ``` 这部分配置确保了只有满足特定条件的记录才会被更新,从而避免误操作和数据污染。 #### 实际应用案例 假设我们需要更新某个退货订单的结算时间,具体操作如下: 1. 提取退货订单信息,包括物流编号(logisticNo)、店铺代码(shopCode)、发货月份(consignMonth)等。 2. 根据业务逻辑,将物流编号拼接处理后作为条件过滤。 3. 调用API接口,将处理后的店铺代码和发货月份更新到对应的客户代码和结算日期字段。 ```json { "api": "UpdateStrategyData", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field":"updateKeys","label":"updateKeys","type":"string","value":"customerCode,settlementDate"}, {"field":"updateValues","label":"updateValues","type":"string","value":"{shopCode},{consignMonth}"}, {"field":"updateTypes","label":"updateTypes","type":"string","value":"string,string"} ], "otherRequest": [ {"field":"strategy_id","label":"目标方案ID","type":"string","value":"87b0d8cc-68ce-3bbf-8381-8dffe9fefe8a"}, {"field":"whereKeys","label":"whereKeys","type":"string","value":"content.logisticNo"}, {"field":"whereValues","label":"whereValues","type":"string","value":"_function CONCAT('{mainPostid}', '-1')"}, {"field":"whereType","label":"whereType","type":"string","value":"string"} ] } ``` 通过上述步骤,我们成功实现了从源系统到目标平台的数据ETL转换与写入。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/T18.png~tplv-syqr462i7n-qeasy.image)