轻易云平台ETL转换与MySQL数据写入实操案例

  • 轻易云集成顾问-陈洁琳
### 金蝶云星空数据集成到MySQL的系统对接案例分享:MOM-拉取销售订单状态更新mom状态 在本次技术案例中,我们将探讨金蝶云星空与MySQL数据库之间的数据集成,以及其中涉及的一些关键技术环节。具体来说,通过轻易云数据集成平台,实现从金蝶云星空API接口`executeBillQuery`定时拉取销售订单状态,并通过MySQL API接口`execute`可靠写入到目标数据库,最终更新MOM中的订单状态。 #### 数据获取和处理流程 首先,我们设计了一个高效的解决方案,用于定期抓取金蝶云星空系统中的销售订单数据。在这个过程中,考虑到了API分页和限流问题,以确保每次调用都能顺利完成而不丢失任何一条记录。为了适应不同业务需求,还使用了自定义数据转换逻辑,对抓取到的原始数据进行格式调整,使其能够无缝地写入到MySQL表中。 #### 实时监控与异常处理 整个数据集成过程采用了全面透明的实时监控机制,随时记录并追踪任务执行情况。一旦发生异常,将通过告警系统即时通知运维人员。同时,为提升数据写入的可靠性,构建了完整的错误重试机制,在遇到网络抖动或者其他暂时性故障情况下,可以确保后续继续尝试直至成功。 #### 高吞吐量支持与批量写入策略 在面对大量销售订单更新时,通过优化批量写入策略,大大提高了系统处理效率。这不仅减少了单条记录逐一插入所带来的性能瓶颈,也保障整个流程能够快速响应和完成。这一点对于生成日常及月度报告尤为重要,因为它直接影响业务决策速度。 #### 隐私保护及质量控制 同时,为保证多源异构环境下的数据一致性与准确性,引入了一套完善的数据质量监控体系。在进入生产环境前,会自动检测并修正潜在的不一致问题,从而避免因低质量输入导致后续分析偏差。此外,各类敏感信息会根据企业内部治理规范进行脱敏或加密存储,以满足合规要求。 下一步我们将在实际操作部分详细介绍如何配置轻易云平台来实现这些功能,包括具体脚本编写、参数设置以及日志查看等内容。敬请期待详细步骤揭示更多技术细节。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取销售订单状态更新,并进行数据加工。 #### 接口配置与请求参数 首先,我们需要了解`executeBillQuery`接口的配置和请求参数。根据提供的元数据配置,接口的基本信息如下: - **API**: `executeBillQuery` - **方法**: `POST` - **作用**: `QUERY` - **关键字段**: `FBillNo`(单号),`FID` 请求参数主要分为两部分:基础请求参数和其他请求参数。 ##### 基础请求参数 基础请求参数包括以下字段: 1. **FID**: 唯一标识符 2. **Fbillno**: 单号 3. **FCloseStatus**: 关闭状态 4. **FCancelStatus**: 作废状态 这些字段用于指定我们需要查询的数据范围和条件。 ##### 其他请求参数 其他请求参数则包括分页、过滤条件等高级选项: 1. **Limit**: 最大行数,设置为2000。 2. **StartRow**: 开始行索引,用于分页。 3. **TopRowCount**: 返回总行数。 4. **FilterString**: 过滤条件,例如 `(FCloseStatus='B' or FCancelStatus='B') and (FCloseDate>='{{LAST_SYNC_TIME|datetime}}' or FCancelDate>='{{LAST_SYNC_TIME|datetime}}')`。 5. **FieldKeys**: 需查询的字段key集合,格式如 `FPOOrderEntry_FEntryId,FPurchaseOrgId.FNumber`。 6. **FormId**: 业务对象表单Id,这里为 `SAL_SaleOrder`。 #### 请求示例 基于上述配置,我们可以构建一个具体的请求示例: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FID", "name": "FBillNo", "request": [ {"field": "FID", "label": "FID", "type": "string", "value": "FID"}, {"field": "Fbillno", "label": "单号", "type": "string", "value": "Fbillno"}, {"field": "FCloseStatus", "label": "关闭状态", "type": "string", "value": "FCloseStatus"}, {"field": "FCancelStatus", "label": "作废状态", "type": "string", "value": "FCancelStatus"} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe":"金蝶的查询分页参数","value":"2000"}, {"field":"StartRow","label":"开始行索引","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_START_ROW}"}, {"field":"TopRowCount","label":"返回总行数","type":"int","describe":"金蝶的查询分页参数"}, {"field":"FilterString","label":"过滤条件","type":"string","describe":"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=","value":"(FCloseStatus='B' or FCancelStatus='B') and (FCloseDate>='{{LAST_SYNC_TIME|datetime}}' or FCancelDate>='{{LAST_SYNC_TIME|datetime}}')"}, {"field":"FieldKeys","label":"需查询的字段key集合","type":"array","describe":"金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber","parser":{"name":"ArrayToString","params":","}}, {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"SAL_SaleOrder"} ], autoFillResponse:true } ``` #### 数据加工与处理 在获取到数据后,需要对其进行必要的清洗和转换,以便后续写入目标系统。以下是一些常见的数据加工步骤: 1. **数据清洗** - 去除重复记录 - 格式化日期和时间字段 - 标准化字符串格式(例如去除前后空格) 2. **数据转换** - 字段映射:将源系统字段映射到目标系统字段 - 数据类型转换:例如,将字符串类型转换为日期类型或整数类型 3. **业务逻辑处理** - 根据业务需求进行特定的数据处理,例如计算某些字段值或合并多条记录。 #### 实时监控与调试 轻易云平台提供了实时监控功能,可以帮助我们跟踪数据流动和处理状态。在调试过程中,可以通过查看日志和监控界面,快速定位问题并进行修正。 通过以上步骤,我们可以高效地调用金蝶云星空接口获取销售订单状态更新,并进行必要的数据加工,为后续的数据写入做好准备。这不仅提升了数据集成过程中的透明度和效率,也确保了数据的一致性和准确性。 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/S13.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入MySQL API接口的技术案例 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台 MySQL API接口所能够接收的格式,最终写入目标平台。以下是一个详细的技术案例,展示如何利用元数据配置完成这一过程。 #### 元数据配置解析 元数据配置如下: ```json { "api": "execute", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "main_params", "label": "main_params", "type": "object", "describe": "111", "value": "1", "children": [ { "field": "SO_NUMBER", "label": "SO_NUMBER", "type": "string", "value": "{Fbillno}" }, { "field": "SO_STATUS", "label": "SO_STATUS", "type": "string", "value": "CLOSED" } ] } ], "otherRequest": [ { "field": "main_sql", "label": "main_sql", "type": "string", "describe": "", "value": `update ty_mes.mt_so_head set SO_STATUS=:SO_STATUS where SO_NUMBER=:SO_NUMBER` } ] } ``` #### 数据请求与清洗 首先,我们从源系统拉取销售订单状态更新的数据。假设我们已经通过轻易云平台完成了数据请求和清洗,这些数据包括订单编号(`Fbillno`)和订单状态(`CLOSED`)。 #### 数据转换与写入 接下来,我们需要将这些清洗后的数据转换为目标平台 MySQL API接口所能接收的格式,并执行写入操作。具体步骤如下: 1. **API接口配置** - API名称:`execute` - 方法:`POST` - ID校验:启用(`idCheck: true`) 2. **请求参数配置** - 主参数字段:`main_params` - 子字段: - `SO_NUMBER`: 从源系统获取的订单编号(例如 `{Fbillno}`) - `SO_STATUS`: 固定值 `CLOSED` 3. **SQL语句配置** - SQL语句:更新目标数据库中的订单状态 ```sql update ty_mes.mt_so_head set SO_STATUS=:SO_STATUS where SO_NUMBER=:SO_NUMBER ``` #### 实际操作步骤 1. **定义请求对象** 根据元数据配置定义请求对象: ```json { main_params: { SO_NUMBER: "{Fbillno}", SO_STATUS: CLOSED }, main_sql: `update ty_mes.mt_so_head set SO_STATUS=:SO_STATUS where SO_NUMBER=:SO_NUMBER` } ``` 2. **发送POST请求** 使用HTTP客户端发送POST请求至MySQL API接口: ```javascript const axios = require('axios'); const requestData = { main_params: { SO_NUMBER: "{Fbillno}", SO_STATUS: 'CLOSED' }, main_sql: 'update ty_mes.mt_so_head set SO_STATUS=:SO_STATUS where SO_NUMBER=:SO_NUMBER' }; axios.post('http://your-mysql-api-endpoint/execute', requestData) .then(response => { console.log('Data successfully written to MySQL:', response.data); }) .catch(error => { console.error('Error writing data to MySQL:', error); }); ``` 3. **验证结果** 检查MySQL数据库中对应订单编号的状态是否已更新为`CLOSED`。 通过上述步骤,我们成功地将源系统的数据经过ETL转换后写入到目标平台MySQL中。这一过程充分利用了轻易云数据集成平台提供的元数据配置功能,实现了高效、透明的数据处理和集成。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)