ETL流程优化:从汤臣倍健营销云提取数据并写入SQLServer的实施方法

  • 轻易云集成顾问-叶威宏
### 汤臣倍健营销云数据集成到SQL Server实施案例分享 在本技术案例中,我们将重点探讨如何通过新版订单同步方案(Life-Space江油泰熙)实现汤臣倍健营销云数据到SQL Server的高效对接。为确保整个集成过程的数据完整性和实时性,本文将详细阐述API调用、批量写入以及异常处理等关键技术环节。 #### 确保集成汤臣倍健营销云数据不漏单 为了避免漏单,在接口调取过程中我们会采用定时任务机制,通过/api/openapi/v1/erp/order/honour/agreement/header接口按固定时间间隔抓取新生成的订单数据。每次请求会记录成功抓取的最后一个订单ID,并传递给下次请求来确保连续获取。另外,通过轻易云平台提供的实时监控功能,对每一次接口调用进行日志记录,保证问题可追溯。 #### 大量数据快速写入到SQL Server 面对海量订单数据,需要确保能迅速、高效地存储至SQL Server中。这要求我们在设计过程中注重批量操作,通过优化insert API进行大规模并发插入。同时,还需考虑分区表、索引优化等数据库层面的性能提升策略,以应对高频率、高并发的数据写入需求。 #### 调用汤臣倍健营销云API及分页处理 当需要从汤臣倍健营销云提取大量历史订单时,分页是必须解决的问题。该平台API限流并限制了返回条数,为此,我们通过多线程并发调度来提高整体提取效率,每个线程独立获取不同页码的数据。此外,针对分页限流所带来的挑战,实现了根据系统反馈自动调整分页参数,提高调用稳定性和效率。 #### 数据格式差异与映射 由于汤臣倍健营销云与SQL Server之间存在一定的数据格式差异,在读取原始JSON响应后,需要通过ETL流程进行字段映射转换。例如,将日期字符串转化为SQL标准时间戳,将金额值从浮点型转化为货币类型。这一系列转换都由预先定制的脚本完成,从而确保最终存储符合业务需求和规范。 总结以上部分内容,本案例将在以下章节深入解析各具体细节操作,包括但不限于:如何设置可靠的定时任务机制、批量导入大容量数据的方法,以及处理各种异常情况的策略。在实际应用中,这些方法不仅显著提升了系统整体运行效率,也保障了业务数据的一致性和准确性。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用汤臣倍健营销云接口获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用汤臣倍健营销云接口 `/api/openapi/v1/erp/order/honour/agreement/header` 获取并加工数据。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,我们可以看到该接口采用 `POST` 方法,主要用于获取订单相关的信息。以下是关键字段的配置说明: - **orgId**: 组织ID,固定值 `d2b2edbfc982424ea9c465847188cdf2` - **page**: 页码,初始值为 `1` - **orderStatus**: 订单状态,包含多个状态值,如 `WAIT_FINANCE_AUDIT, WAIT_DELIVERY, PART_DELIVERY, ALL_DELIVERY, WAIT_OUT_STORAGE, PART_OUT_STORAGE` - **lastStartDt** 和 **lastEndDt**: 最后修改时间范围,分别使用 `{{LAST_SYNC_TIME|datetime}}` 和 `{{CURRENT_TIME|datetime}}` 动态生成 - **nature**: 单据类型,固定值为 `1`(订单) 其他字段如 `id`, `applyerId`, `supplierId`, 等等,可以根据具体需求进行动态赋值。 #### 请求示例 基于上述配置,一个典型的请求体可能如下所示: ```json { "orgId": "d2b2edbfc982424ea9c465847188cdf2", "page": "1", "orderStatus": "WAIT_FINANCE_AUDIT,WAIT_DELIVERY,PART_DELIVERY,ALL_DELIVERY,WAIT_OUT_STORAGE,PART_OUT_STORAGE", "lastStartDt": "{{LAST_SYNC_TIME|datetime}}", "lastEndDt": "{{CURRENT_TIME|datetime}}", "nature": "1" } ``` #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以便后续处理。以下是一些常见的数据清洗与转换操作: 1. **字段映射**:将源系统中的字段映射到目标系统所需的字段。例如,将源系统中的 `orderNo` 映射为目标系统中的 `orderNumber`。 2. **数据格式转换**:将日期格式从源系统的格式转换为目标系统所需的格式。例如,将 `2023-10-01T12:00:00Z` 转换为 `2023/10/01 12:00:00`。 3. **数据过滤**:根据业务规则过滤掉不需要的数据。例如,只保留订单状态为 `WAIT_FINANCE_AUDIT` 的记录。 4. **合并与拆分**:根据业务需求对数据进行合并或拆分。例如,将多个订单项合并为一个订单记录,或者将一个复杂的 JSON 对象拆分为多个简单对象。 #### 实时监控与错误处理 在整个数据请求和处理过程中,实时监控和错误处理是确保数据集成顺利进行的重要环节。轻易云平台提供了全面的监控功能,可以实时查看每个请求的状态和结果。如果出现错误,可以通过日志和告警机制及时发现并处理。 例如,如果某个请求返回了错误码,可以自动触发告警,并记录详细的错误信息供后续分析: ```json { "errorCode": "500", "errorMessage": "Internal Server Error", "requestPayload": { ... }, "responsePayload": { ... } } ``` 通过以上步骤,我们可以高效地调用汤臣倍健营销云接口获取订单数据,并进行必要的数据清洗和转换,为后续的数据写入和分析奠定基础。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/S8.png~tplv-syqr462i7n-qeasy.image) ### 数据集成生命周期中的ETL转换与写入 在轻易云数据集成平台中,数据处理的第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并最终写入目标平台。本案例中,我们将探讨如何将数据转换为SQL Server API接口所能接收的格式,并写入目标平台。 #### API接口配置与调用 首先,我们需要配置API接口,以便正确地将数据传输到SQL Server。根据元数据配置,API接口为`insert`,方法为`POST`。以下是具体的请求参数及其对应的字段: ```json { "api": "insert", "method": "POST", "idCheck": true, "request": [ { "label": "主表参数", "field": "main_params", "type": "object", "children": [ {"parent": "main_params", "label": "订单单号", "field": "djbh", "type": "string", "value": "{no}"}, {"parent": "main_params", "label": "订单明细序号", "field": "dj_sn", "type": "string", "value": "{bfn_line}"}, {"parent": "main_params", "label": "商品ID", "field": "spid", "type": "string", // 通过查询获取商品ID // 查找集合d76b64f9-f0e0-3436-a2d9-14c5579faa1b中spbh2等于details_extNo的记录 // 并提取spid字段值 // _findCollection find spid from d76b64f9-f0e0-3436-a2d9-14c5579faa1b where spbh2={details_extNo} }, {"parent": "main_params", ... ``` #### 数据清洗与转换 在数据清洗阶段,我们需要确保所有字段的数据类型和格式都符合目标平台的要求。例如,日期格式需要从源系统的格式转换为SQL Server能够识别的格式。以下是几个关键字段的转换示例: - **有效期(Sxrq)**:`{{details__Fexp|date}}` - **生产日期(Baozhiqi)**:`{{details__Fmfg|date}}` - **订单日期(rq)**:`{{lastUpdateDt|date}}` - **订单时间(ontime)**:`{{lastUpdateDt|time}}` 这些字段使用了模板语言进行格式化处理,确保日期和时间能够被正确解析。 #### 数据写入 最后一步是将清洗和转换后的数据写入SQL Server。根据元数据配置,我们需要执行一条SQL插入语句: ```sql INSERT INTO Inter_ddmx (djbh ,dj_sn,spid,shl,Pihao,Sxrq,Baozhiqi,hshj,hsje,beizhu,rq,ontime,wldwname,wldwid,dizhi,shr,shrdh,ywy,hzid,ckname) VALUES (:djbh ,:dj_sn,:spid,:shl,:Pihao,:Sxrq,:Baozhiqi,:hshj,:hsje,:beizhu,:rq,:ontime,:wldwname,:wldwid,:dizhi,:shr,:shrdh,:ywy,:hzid,:ckname) ``` 这里使用了命名参数绑定方式,将前面步骤中处理好的字段值插入到对应的位置。 #### 实际应用案例 假设我们有一个订单记录,其部分数据如下: ```json { ... // 示例字段值 { no: 'ORD12345', bfn_line: '001', details_extNo: 'PROD67890', details_quantity: '10', details__Flot: 'BATCH001', details__Fexp: '2023-12-31T00:00:00Z', details__Fmfg: '2023-01-01T00:00:00Z', details_price: '100.00', details_money: '1000.00', remark: 'Urgent order', lastUpdateDt: '2023-10-01T12:34:56Z', details_unitCode: 'UNIT001', clientAppNo: 'APP12345', shippingAddress: '123 Main St.', contacts: 'John Doe', phone: '+1234567890', salesmanName: 'Jane Smith', orgName: 'Warehouse A' } } ``` 经过ETL处理后,生成的SQL插入语句如下: ```sql INSERT INTO Inter_ddmx (djbh ,dj_sn,spid,shl,Pihao,Sxrq,Baozhiqi,hshj,hsje,beizhu,rq,ontime,wldwname,wldwid,dizhi,shr,shrdh,ywy,hzid,ckname) VALUES ('ORD12345', '001', (SELECT spid FROM d76b64f9-f0e0-3436-a2d9-14c5579faa1b WHERE spbh2='PROD67890'), '10', 'BATCH001', CONVERT(DATE,'2023-12-31'), CONVERT(DATE,'2023-01-01'), '100.00', '1000.00', 'Urgent order', CONVERT(DATE,'2023-10-01'), CONVERT(TIME,'12:34:56'), 'UNIT001', 'APP12345', '123 Main St.', 'John Doe', '+1234567890', 'Jane Smith', 'd2b2edbfc982424ea9c465847188cdf2', 'Warehouse A') ``` 通过这种方式,我们实现了从源系统到目标系统的数据无缝对接,并确保每个环节的数据准确性和一致性。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/T8.png~tplv-syqr462i7n-qeasy.image)