利用轻易云平台进行ETL转换并写入MySQL数据库

  • 轻易云集成顾问-冯潇
### 金蝶云星空数据集成到MySQL:ZZ组装生产订单-表体-制造一处 在系统集成领域,高效、稳定的数据对接对于企业运营的持续优化至关重要。本文将分享一个实际操作案例,通过轻易云数据集成平台,实现金蝶云星空的数据精准获取与MySQL数据库的快速写入任务。 本次案例中,目标是将金蝶云星空系统中的“ZZ组装生产订单-表体-制造一处”数据批量导出,并高效地同步到MySQL数据库中。这不仅要求处理大量数据,还必须确保在整个流程中没有任何遗漏单据,同时具备实时监控和异常处理能力。 #### 数据提取与API接口调用 为了从金蝶云星空系统获取所需的生产订单数据,我们采用了其提供的`executeBillQuery` API接口。这个API可以通过指定查询条件,返回符合条件的数据集。实施过程中需要特别关注分页和限流问题,以确保大规模数据能够被顺利抓取: ```javascript POST /k3cloud/api/executeBillQuery HTTP/1.1 Host: your_kd_cloud_hostname Content-Type: application/json { "formId": "PRD_MO", "fieldKeys": ["FMoNumber", "FMATERIALID",...], ... } ``` 上述请求示例展示了如何通过调用 `executeBillQuery` 接口来获取特定字段的信息。 #### MySQL数据库写入与自定义转换逻辑 获得原始数据后,我们利用轻易云的平台特性,将这些信息高吞吐量地写入至MySQL数据库。在此过程中,需要使用一个类似于`execute` 的API接口,这样我们可以直接进行批量插入: ```sql INSERT INTO production_orders (order_number, material_id, ...) VALUES (?, ?, ...); ``` 同时,在执行这些操作时,需要根据业务需求及各个系统间可能存在的数据格式差异,自定义必要的数据转换逻辑。例如,将时间戳格式统一处理或数值类型矫正等,这一步骤尤其关键,可以避免因格式问题导致后续分析或业务决策上的误判。 #### 实时监控与可靠性保证 为保障整个过程的可靠性和及时响应潜在的问题,通过轻易云内置的集中监控和告警功能,可以全方位了解各个任务状态。同时,对每一次的数据传输事件记录日志并设置错误重试机制,使得即使遇到网络波动等不可预见情况,也能自动恢复并完成既定的数据集成任务。 综上所述,本次实践从多个角度探索了如何有效、安全、高速地实现两个复杂系统间的大规模数据对接,而技术细节中的每一步都 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/D21.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成生命周期的第一步,调用源系统接口获取数据是至关重要的。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取生产订单表体的数据,并进行初步加工。 #### 接口调用配置 我们首先需要配置接口调用的元数据。根据提供的元数据配置,我们可以看到以下关键字段: - **api**: `executeBillQuery` - **method**: `POST` - **id**: `FEntryId` - **name**: `FBillNo` - **idCheck**: `true` 这些字段定义了我们将要调用的API名称、请求方法以及主键和名称字段。 #### 请求参数配置 在请求参数中,我们需要特别关注以下几个部分: 1. **请求字段(request)**: - 这些字段定义了我们需要从金蝶云星空中查询的数据项。例如,生产订单表头ID(`FID`)、成品编号(`FMaterialId.FNumber`)、数量(`FQty`)等。 - 每个字段都有明确的标签、类型和描述,确保我们能够准确地映射和处理这些数据。 2. **其他请求参数(otherRequest)**: - 这些参数主要用于分页和过滤条件设置。例如,最大行数(`Limit`)、开始行索引(`StartRow`)、过滤条件(`FilterString`)等。 - 过滤条件示例:`FPrdOrgId.fnumber in ('T01.01','T04') and left(FBillNo,2)='MO' and F_ESYNCMOM=0 and FBillType.fnumber='SCDD01_SYS' and FApproveDate>'2023-09-10' and FDocumentStatus ='C'` #### 实际调用示例 下面是一个实际的API调用示例,通过POST方法向金蝶云星空发送请求: ```json { "api": "executeBillQuery", "method": "POST", "id": "FEntryId", "name": "FBillNo", "idCheck": true, "request": [ {"field":"FID","label":"生产订单表头id","type":"string","value":"FID"}, {"field":"FEntryId","label":"实体主键","type":"string","value":"FTreeEntity_FEntryId"}, {"field":"FMaterialId","label":"成品编号","type":"string","value":"FMaterialId.FNumber"}, {"field":"FQty","label":"数量","type":"string","value":"FQty"}, {"field":"FPlanStartDate","label":"计划开工时间","type":"string","value":"FPlanStartDate"}, {"field":"FMTONO","label":"计划跟踪号","type":"string","value":"FMTONO"}, {"field":"FLot","label":"批号","type":"string","value":"FLot.FNumber"}, {"field":"FBomId","label":"BOM版本","type":"string","value":"FBomId.FNumber"}, {"field":"FStatus","label":"业务状态","type":"string","value":"FStatus"}, {"field":"FBaseUnitId","label":"基本单位","type":"string","value":"FBaseUnitId.FNumber"}, {"field":"FWorkShopID","label":"生产车间","type":"string","value":"FWorkShopID.FNumber"}, {"field":"Fseq","label":"生产订单行号","type":"","value":""}, {"field":""} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "2000"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field": "", ""} ] } ``` #### 数据清洗与转换 在获取到原始数据后,我们需要对其进行清洗和转换,以便后续的数据处理步骤。以下是一些常见的数据清洗与转换操作: 1. **去除冗余字段**:只保留必要的数据项,去除不需要的字段。 2. **格式转换**:将日期、数字等字段转换为标准格式,确保一致性。 3. **数据校验**:检查数据完整性和准确性,例如主键是否唯一、必填字段是否为空等。 #### 实践中的注意事项 1. **性能优化**:在大规模数据查询时,需要合理设置分页参数,以避免一次性查询过多数据导致性能问题。 2. **错误处理**:对API调用过程中可能出现的错误进行捕获和处理,如网络异常、权限不足等。 3. **日志记录**:记录每次API调用的详细日志,包括请求参数、响应结果和执行时间,以便后续分析和排查问题。 通过以上步骤,我们可以高效地从金蝶云星空中获取所需的数据,并为后续的数据处理打下坚实基础。这一过程不仅提升了业务透明度,还极大地提高了工作效率。 ![打通钉钉数据接口](https://pic.qeasy.cloud/S19.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": "FID", "label": "生产订单表头id", "type": "string", "value": "{FID}"}, {"field": "FEntryId", "label": "实体主键", "type": "string", "value": "{FEntryId}"}, {"field": "FMaterialId", "label": "成品编号", "type": "string", "value": "{FMaterialId}"}, {"field": "FQty", "label": "数量", "type": "string", "value": "{FQty}"}, {"field": "FPlanStartDate", "label":"计划开工时间","type":"string","value":"{FPlanStartDate}"}, {"field":"FMTONO","label":"计划跟踪号","type":"string","value":"{FMTONO}"}, {"field":"FLot","label":"批号","type":"string","value":"{FLot}"}, {"field":"FBomId","label":"BOM版本","type":"string","value":"{FBomId}"}, {"field":"FStatus","label":"业务状态","type":"string","value":"{FStatus}"}, {"field":"FBaseUnitId","label":"基本单位","type":"string","value":"{FBaseUnitId}"}, {"field":"FWorkShopID","label":"生产车间","type":"string","value":"{FWorkShopID}"}, {"field":"Fseq","label":"生产订单行号","type":"string","value":"{Fseq}"}, {"field":"FPickMtrlStatus","label":"领料状态","type":"string","value":"{FPickMtrlStatus}"}, {"field":"FWorkShopName","label":"车间名称","type":"string","value":"{FWorkShopName}"} ] } ], ... } ``` #### 数据请求与清洗 在这一阶段,我们从源系统提取原始数据,并对其进行必要的清洗和预处理,以确保其符合目标系统的要求。通过配置`main_params`对象,我们可以定义每个字段的数据类型和映射关系。 例如,`FID`字段表示生产订单表头ID,其值通过占位符`{FID}`从源数据中提取。同样地,其他字段如`FEntryId`、`FMaterialId`等也按照类似方式进行映射。 #### 数据转换与写入 完成数据清洗后,我们进入关键的ETL转换和写入阶段。我们使用SQL语句将清洗后的数据插入到目标MySQL数据库中。以下是用于插入操作的SQL模板: ```sql INSERT INTO mbs_assemble_detail (FID, FEntryId, FMaterialId, FQty, FPlanStartDate, FMTONO, FLot, FBomId, FStatus, FBaseUnitId, FWorkShopID, Fseq, FPickMtrlStatus, FWorkShopName) VALUES (:FID, :FEntryId, :FMaterialId, :FQty, :FPlanStartDate, :FMTONO, :FLot, :FBomId, :FStatus, :FBaseUnitId, :FWorkShopID, :Fseq, :FPickMtrlStatus,: FWorkShopName) ``` 在这个SQL语句中,每个字段都对应于前面定义的元数据配置中的字段。通过使用占位符(如`:FID`, `:FEntryId`),我们可以动态地将清洗后的数据填充到SQL语句中,从而实现灵活的数据插入操作。 #### 调用API接口 最后一步是通过API接口将转换后的数据写入目标MySQL数据库。在轻易云平台上,这一过程通常通过HTTP POST请求来实现。根据元数据配置中的`method: POST`,我们可以构建一个POST请求,将包含转换后数据的JSON对象发送到指定的API端点。 以下是一个示例POST请求: ```http POST /execute HTTP/1.1 Host: target-mysql-api.com Content-Type: application/json { ... // JSON对象包含所有映射后的字段和值 } ``` 通过上述步骤,我们成功地将源平台的数据进行了ETL转换,并最终写入到了目标MySQL数据库中。这一过程不仅保证了数据的一致性和完整性,还提高了系统集成的效率和透明度。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)