使用轻易云平台进行ETL与MySQL数据写入的技术分享

  • 轻易云集成顾问-曹润
### 金蝶云星空数据集成到MySQL的技术案例分享 在系统对接和数据集成领域,如何高效、稳定地将金蝶云星空的数据导入至MySQL数据库一直是一个备受关注的话题。本文将结合具体的案例“kd-金蝶查询收款退款单-->mysql(鸿巢)”,详细解析这个过程中的关键技术点与解决方案。 #### 获取API数据 本案例中,我们通过调用金蝶云星空提供的`executeBillQuery`接口来获取收款和退款单据。该接口能够确保高效、安全地传输大量业务数据。然而,由于API响应可能会有分页和限流问题,我们需要设计一个可靠的定时抓取机制来应对这些挑战。在实际操作中,通过轻易云提供的集中监控和告警系统,可实时跟踪每次调用状态,并及时处理异常情况。 #### 数据转换与写入 从金蝶云星空获取的数据通常不直接兼容MySQL,因此需要进行自定义数据转换,以适应特定业务需求及数据库结构。例如,需要根据字段类型、名称进行映射,并处理时间格式、货币单位等细节问题。这一过程中可视化的数据流设计工具起到了重要作用,使得整个流程更加直观并且易于管理。 实现批量、高速写入是本次集成任务的一大亮点。我们采用了支持高吞吐量的数据写入能力,使得大量记录可以快速落库到MySQL中。此外,为进一步保障进程顺利,建立了完善的异常处理与错误重试机制。一旦发生写入失败或网络波动,系统能自动重新尝试确保所有记录无遗漏完成导入。 #### 实时监控与日志记录 为了确保整个数据集成过程透明可追溯,我们配置了全面而灵活的监控策略,包括性能指标实时展示以及详细日志记录。从初始请求到最终落库,每一步都有着精确定位,一旦出现故障,可以迅速排查并恢复服务,这极大提升了运维效率及系统可靠性。 上述步骤只是整个方案的一部分,还涉及更多细节如分页策略优化、限流保护措施等,将在后续内容中逐步展开分析。通过这些技术手段,在保证准确性的前提下,实现了大规模、多样化数据从金蝶云星空向MySQL的平稳迁移整合。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/D26.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台中,调用源系统的API接口是数据处理生命周期的第一步。本文将深入探讨如何通过调用金蝶云星空的`executeBillQuery`接口来获取和加工数据,并将其集成到目标系统中。 #### 接口配置与请求参数 首先,我们需要配置调用金蝶云星空`executeBillQuery`接口所需的元数据。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FBillNo", "id": "FREFUNDBILLENTRY_FEntryID", "idCheck": true, "formatResponse": [ { "old": "FDATE", "new": "FDate_new", "format": "date" } ], "request": [ {"field":"FREFUNDBILLENTRY_FEntryID","label":"明细实例id","type":"string","describe":"111","value":"FREFUNDBILLENTRY_FEntryID"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"111","value":"FBillNo"}, {"field":"FDOCUMENTSTATUS","label":"单据类型","type":"string","describe":"111","value":"FDOCUMENTSTATUS"}, {"field":"FDATE","label":"日期","type":"string","describe":"111","value":"FDATE"}, {"field":"FREFUNDAMOUNTFOR","label":"金额","type":"string","describe":"111","value":"FREFUNDAMOUNTFOR"}, {"field":"FCreaterId","label":"FCreaterId","type":"string","value":"FCreaterId"} ], "otherRequest": [ {"field":"Limit","label":"Limit","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"StartRow","label":"StartRow","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_START_ROW}"}, {"field":"TopRowCount","label":"TopRowCount","type":"int","describe":"金蝶的查询分页参数"}, {"field":"FilterString","label":"FilterString","type":"string","describe":"","value":"'{{LAST_SYNC_TIME|date}}' and FCreaterId = '100796'"}, {"field":"FieldKeys","label":"","type":"","describe":"","value":"'FPOOrderEntry_FEntryId,FPurchaseOrgId.FNumber'"}, {"field":"","label":"","type":"","describe":"","value":"'AR_REFUNDBILL'"} ], "autoFillResponse": true } ``` #### 请求参数详解 1. **基础请求字段**: - `FREFUNDBILLENTRY_FEntryID`: 明细实例ID。 - `FBillNo`: 单据编号。 - `FDOCUMENTSTATUS`: 单据类型。 - `FDATE`: 日期。 - `FREFUNDAMOUNTFOR`: 金额。 - `FCreaterId`: 创建者ID。 2. **其他请求字段**: - `Limit` 和 `StartRow`: 分页参数,用于控制每次查询的数据量和起始行数。 - `TopRowCount`: 用于指定返回结果的最大行数。 - `FilterString`: 查询过滤条件,这里示例为根据上次同步时间和创建者ID进行过滤。 - `FieldKeys`: 指定需要返回的字段,格式为分录主键ID或其它格式。 - `FormId`: 金蝶表单ID,这里为`AR_REFUNDBILL`。 #### 数据格式化与响应处理 在获取到原始数据后,需要对部分字段进行格式化处理。例如,将日期字段`FDATE`转换为新的字段名`FDate_new`并格式化为日期类型: ```json { "formatResponse": [ { "old": "FDATE", "new": "FDate_new", "format": "date" } ] } ``` 通过这种方式,可以确保数据在进入目标系统前已经过必要的清洗和转换,符合业务需求。 #### 实际应用案例 假设我们需要从金蝶云星空中查询收款退款单,并将其写入MySQL数据库。具体步骤如下: 1. **配置API请求**:按照上述元数据配置,构建HTTP POST请求,包含必要的请求参数和过滤条件。 2. **发送请求并接收响应**:通过轻易云平台发送请求至金蝶云星空API,并接收返回的数据。 3. **数据清洗与转换**:根据配置对接收到的数据进行清洗和转换,例如日期格式化、字段重命名等。 4. **写入目标系统**:将处理后的数据写入MySQL数据库,完成数据集成过程。 通过上述步骤,我们可以高效地实现不同系统间的数据无缝对接,确保数据的一致性和完整性。这种方法不仅提升了业务透明度,还极大地提高了工作效率。 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入MySQL API接口的技术案例 在轻易云数据集成平台中,数据处理的生命周期分为两个主要阶段:数据请求与清洗、数据转换与写入。本文将深入探讨如何将已集成的源平台数据进行ETL转换,并转为目标平台MySQL API接口所能够接收的格式,最终写入目标平台。 #### 元数据配置解析 在本案例中,我们需要将金蝶查询收款退款单的数据通过ETL过程转换后写入MySQL数据库。以下是元数据配置的详细解析: ```json { "api": "execute", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "main_params", "label": "main_params", "type": "object", "describe": "111", "children": [ {"field": "FEntity_FEntryID", "label": "明细id", "type": "string", "value": "{FREFUNDBILLENTRY_FEntryID}"}, {"field": "order_no_new", "label": "单号", "type": "string", "value": "{FBillNo}"}, {"field": "FDocumentStatus", "label": "状态", "type": "string", "value": "{FDOCUMENTSTATUS}"}, {"field": "qty_count", "label": "数量", "type":"string","value":"1"}, {"field":"sales_count","label":"金额","type":"string","value":"{FREFUNDAMOUNTFOR}"}, {"field":"datetime_new","label":"时间","type":"date","value":"{FDate_new}"}, {"field":"Document_Type","label":"单据类型","type":"string","value":"收款退款"} ] } ], "otherRequest":[ { "field":"main_sql", "label":"main_sql", "type":"string", "describe":"111", "value":"INSERT INTO `hc_kd_sktk`(`FEntity_FEntryID`,`order_no_new`,`FDocumentStatus`,`qty_count`,`sales_count`,`datetime_new`,`Document_Type`) VALUES (:FEntity_FEntryID,:order_no_new,:FDocumentStatus,:qty_count,:sales_count,:datetime_new,:Document_Type)" } ] } ``` #### 数据请求与清洗 首先,我们从金蝶系统中提取原始数据。这些原始数据可能包含冗余信息或格式不符合目标系统要求。因此,需要对这些数据进行清洗和预处理。例如,将日期格式标准化、去除无效字符等。 #### 数据转换与写入 在完成初步的数据清洗后,我们进入关键的ETL转换阶段。根据元数据配置,将源数据字段映射到目标字段,并按照MySQL API接口要求的格式进行转换。 1. **字段映射与转换**: - `FEntity_FEntryID` -> `{FREFUNDBILLENTRY_FEntryID}` - `order_no_new` -> `{FBillNo}` - `FDocumentStatus` -> `{FDOCUMENTSTATUS}` - `qty_count` 固定值为1 - `sales_count` -> `{FREFUNDAMOUNTFOR}` - `datetime_new` -> `{FDate_new}` - `Document_Type` 固定值为"收款退款" 2. **构建SQL语句**: 根据元数据中的SQL模板,将映射后的字段值插入到相应的位置,形成最终的SQL语句: ```sql INSERT INTO `hc_kd_sktk` (`FEntity_FEntryID`, `order_no_new`, `FDocumentStatus`, `qty_count`, `sales_count`, `datetime_new`, `Document_Type`) VALUES (:FEntity_FEntryID, :order_no_new, :FDocumentStatus, :qty_count, :sales_count, :datetime_new, :Document_Type) ``` 3. **执行SQL语句**: 使用POST方法,通过API接口将构建好的SQL语句发送到MySQL数据库进行执行。确保在发送前对每个字段进行必要的校验(如idCheck),以保证数据的一致性和完整性。 #### 实际应用案例 假设我们从金蝶系统获取到以下原始记录: ```json { FREFUNDBILLENTRY_FEntryID: '12345', FBillNo: 'KD20231001', FDOCUMENTSTATUS: 'A', FREFUNDAMOUNTFOR: '1000.00', FDate_new: '2023-10-01' } ``` 根据上述配置和步骤,最终生成并执行的SQL语句如下: ```sql INSERT INTO `hc_kd_sktk` (`FEntity_FEntryID`, `order_no_new`, `FDocumentStatus`, `qty_count`, `sales_count`, `datetime_new`, `Document_Type`) VALUES ('12345', 'KD20231001', 'A', '1', '1000.00', '2023-10-01', '收款退款') ``` 通过轻易云数据集成平台,我们实现了从金蝶系统到MySQL数据库的数据无缝对接,确保了各个环节的数据准确性和一致性。这不仅提高了业务效率,还增强了系统间的数据透明度和可追溯性。 ![打通钉钉数据接口](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)