基于轻易云平台的金蝶云星空与MySQL数据清洗与转换

  • 轻易云集成顾问-蔡威
### 金蝶云星空数据集成到MySQL的技术实践:ZZ用料清单用料明细数据-删除-制造一处 在企业的信息化建设过程中,实现不同系统间的数据互通是至关重要的一环。本次我们将分享一个实际案例,展示如何利用轻易云平台实现金蝶云星空与MySQL之间高效、可靠的数据集成。具体方案为: ZZ用料清单用料明细数据-删除-制造一处。 在本方案中,我们主要利用了金蝶云星空提供的API接口`executeBillQuery`来实时抓取数据,并通过自定义转换逻辑,将其批量写入到MySQL数据库,使用的是其写入API `execute`。为了确保整个流程的顺畅与高效,我们充分借助了一系列关键特性和功能: 1. **支持高吞吐量的数据写入能力**:大规模的数据需要快速、稳定地传输,因此选择适合的大吞吐量配置显得尤为重要。 2. **集中监控和告警系统**:整个数据集成任务不仅需要保证性能,还要能即时掌握状态。当出现异常时,及时处理预警能够极大提高运维效率。 3. **分页和限流处理**:为了应对金蝶云星空接口可能存在的分页限制及流量控制机制,在抓取操作中设计了相应的策略以确保完整性与稳定性。 4. **定制化数据映射**:由于两套系统在结构以及业务规则上的差异,需要进行精准的数据转换,以便最终符合目标数据库(MySQL)的需求。 通过这些步骤和技术手段,我们有效解决了跨平台数据迁移中常见的问题,同时也保障了业务连续性的要求。这只是开篇,引领你了解我们的整体实施思路及亮点。而接下来,我将详细讲述该方案中的每一步具体操作方法和所使用工具,希望对大家有所帮助。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/D9.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取原始数据。在本案例中,我们将聚焦于如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取并加工数据。 #### 接口配置与请求参数 首先,我们需要配置元数据以便正确调用金蝶云星空的`executeBillQuery`接口。以下是该接口的元数据配置: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "id": "FEntity_FEntryID", "name": "FBillNo", "request": [ {"field": "FID", "label": "实体主键", "type": "string", "value": "FID"}, {"field": "FBillNo", "label": "单据编号", "type": "string", "value": "FBillNo"}, {"field": "fmobillno", "label": "fmobillno", "type": "string", "value": "fmobillno"} ], ... } ``` 在这个配置中,`api`字段指定了要调用的接口名称为`executeBillQuery`,请求方法为`POST`。关键字段包括: - `FID`: 实体主键 - `FBillNo`: 单据编号 - `fmobillno`: fmobillno 此外,还有一些分页和过滤参数,如下所示: ```json { ... "otherRequest": [ {"field":"Limit","label":"最大行数","type":"string","describe":"金蝶的查询分页参数","value":"5000"}, {"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":"FPrdOrgId.fnumber in ('T01.01','T04') and FDocumentStatus='C' and FApproveDate>'2024-01-01' and F_FSYNCMOM=0 and left(fmobillno,2)='MO'"}, ... ] } ``` 这些参数用于控制查询结果的分页和过滤条件。例如,`Limit`字段设置了每次查询返回的最大行数为5000,`FilterString`字段定义了复杂的过滤条件。 #### 数据请求与清洗 在发起请求后,我们会得到一个包含原始数据的响应。为了确保数据质量和一致性,需要对这些原始数据进行清洗和转换。以下是一个简单的数据清洗流程: 1. **去除无效记录**:根据业务需求,去除不符合条件的数据记录。 2. **字段映射**:将源系统中的字段映射到目标系统中的相应字段。 3. **格式转换**:将日期、数字等字段转换为目标系统所需的格式。 例如,如果我们从金蝶云星空获取到如下原始数据: ```json [ { "FID": "12345", "FBillNo": "PO20230101", ... }, ... ] ``` 我们可以通过轻易云平台提供的数据清洗工具,将其转换为目标系统所需的格式。 #### 数据转换与写入 经过清洗后的数据需要进一步转换,以便写入目标系统。在轻易云平台上,可以使用内置的数据转换工具来完成这一过程。例如,可以使用批量保存方法将清洗后的数组数据保存到目标系统中: ```json { ... "operation":{ ... ,"method":"batchArraySave" } } ``` 这种方法能够高效地处理大批量的数据,并确保每条记录都能正确写入目标系统。 #### 实际案例应用 假设我们需要删除制造一处中的用料明细数据,可以通过以下步骤实现: 1. **调用API获取原始数据**:使用上述元数据配置,通过轻易云平台调用金蝶云星空接口获取用料明细数据。 2. **清洗与过滤**:根据业务规则,过滤掉不需要删除的数据记录。 3. **执行删除操作**:将符合条件的数据记录标记为待删除,并通过轻易云平台执行批量删除操作。 通过以上步骤,我们能够高效地实现从源系统获取、清洗、转换并最终写入或删除目标系统中的数据。这不仅提高了业务处理效率,也确保了数据的一致性和准确性。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/S8.png~tplv-syqr462i7n-qeasy.image) ### 数据转换与写入目标平台 MySQLAPI接口 在轻易云数据集成平台的生命周期中,数据转换与写入是关键的一步。本文将详细探讨如何将已经集成的源平台数据通过ETL转换,转为目标平台 MySQLAPI接口所能够接收的格式,并最终写入目标平台。 #### 元数据配置解析 首先,我们需要理解元数据配置中的各个字段及其含义: ```json { "api": "execute", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "main_params", "label": "main_params", "type": "object", "children": [ { "field": "FID", "label": "实体主键", "type": "string", "value": "{FID}" } ] } ], "otherRequest": [ { "field": "main_sql", "label": "main_sql", "type": "string", "describe": "111", "value": "delete from mbs_assemble_material_detail where fid=:FID" } ] } ``` - `api`: 指定API接口名称,这里为`execute`。 - `effect`: 操作类型,这里为`EXECUTE`。 - `method`: HTTP请求方法,这里为`POST`。 - `idCheck`: 是否进行ID校验,这里设置为`true`。 - `request`: 请求参数列表,包含一个对象类型的参数`main_params`,其中包含子字段`FID`,代表实体主键。 - `otherRequest`: 其他请求参数,这里包含一个SQL语句,用于删除操作。 #### 数据请求与清洗 在进行数据转换之前,我们首先需要从源平台获取数据并进行清洗。假设我们已经从源平台获取了如下数据: ```json { "FID": "12345" } ``` #### 数据转换 根据元数据配置,我们需要将上述数据转换为目标平台 MySQLAPI接口能够接收的格式。具体步骤如下: 1. **构建请求参数**: - 根据元数据中的`request`字段,我们需要构建一个包含主键的对象。 - 将获取到的`FID`值填充到相应位置。 2. **构建SQL语句**: - 根据元数据中的`otherRequest`字段,我们需要构建一个删除操作的SQL语句。 - 将获取到的`FID`值替换SQL语句中的占位符。 最终构建的请求体如下: ```json { "main_params": { "FID": "12345" }, "main_sql": { "$value$delete from mbs_assemble_material_detail where fid=:FID" } } ``` #### 写入目标平台 最后一步是将转换后的数据通过API接口写入目标平台。我们使用HTTP POST方法,将构建好的请求体发送到指定的API端点。 以下是一个示例代码片段,展示如何使用Python进行该操作: ```python import requests import json url = 'http://your-api-endpoint/execute' headers = {'Content-Type': 'application/json'} data = { 'main_params': { 'FID': '12345' }, 'main_sql': 'delete from mbs_assemble_material_detail where fid=:FID' } response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print('Data successfully written to the target platform.') else: print('Failed to write data:', response.text) ``` 通过上述步骤,我们成功地将源平台的数据经过ETL转换后,写入到了目标平台 MySQLAPI接口。这一过程不仅保证了数据的一致性和完整性,还提高了系统集成的效率和可靠性。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/T10.png~tplv-syqr462i7n-qeasy.image)