轻易云平台实现ETL转换并写入金蝶云星空的实践

  • 轻易云集成顾问-吕修远
### 每刻自定义档案—部门->金蝶部门数据集成案例分享 在企业信息化管理中,跨系统的数据集成是提高业务效率和准确性的关键步骤。本篇文章将重点分享如何通过轻易云数据集成平台,将每刻的自定义档案——部门数据高效、安全地集成到金蝶云星空,同时实现对整个过程的实时监控与优化。 **挑战概述** 在该技术案例中,我们面临以下几个主要挑战: 1. **数据格式差异**:每刻API接口`/api/openapi/reference/data/detail/query`返回的数据格式和结构,与金蝶云星空API `batchSave`所需的数据格式存在较大差异,需要进行定制化转换。 2. **分页与限流问题**:由于每刻接口有分页限制和访问速率限制,在大量数据获取时需要设计合理的抓取策略,确保数据不漏单且符合速率规范。 3. **实时监控与告警系统**:提供一个可靠的集中监控机制,以便实时跟踪各个任务状态及性能,并在出现异常情况时及时告警处理。 **解决方案** 为有效应对上述挑战,我们实施了一系列技术手段: - **自定义数据转换逻辑** 利用轻易云平台内置的可视化数据流设计工具,对从每刻获取的数据进行字段映射和结构调整,使之满足金蝶云星空所需的输入标准。通过编写脚本或使用图形界面配置,实现对字段类型、名称和层级关系的一一对应。 - **高吞吐量批量写入** 采用批量操作的方法,将经过清洗转换后的多个记录一次性写入到金蝶云星空数据库,大幅提升了整体操作效率。同时,通过合理设置事务大小和平衡负载,确保大规模并发情况下性能稳定。 - **分页抓取与限流控制** 针对每刻API的分页响应特性,设计了循环调用机制,每次请求下一页的数据直至全部获取完毕。同时,为避免触发限流规则,每间隔一定时间发送请求,从而平衡抓取速度与系统资源利用率。 - **集中式监控与告警** 实现了一套完善的监控体系,通过定期采样分析任务执行状态,并结合日志记录功能,对可能发生的问题如网络延迟、服务错误等给予预警提示。在发现异常后自动启动重试机制以保证任务顺利完成,进一步提高了集成过程中的可靠性。 这样一来,即使面对复杂多变的大容量业务需求,该方案也能保障每日数千笔乃至上万笔记录能够快速、高质量地同步至目标系统,无明显遗漏或延迟现象 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D28.png~tplv-syqr462i7n-qeasy.image) ### 调用每刻接口获取并加工数据的技术案例 在数据集成生命周期的第一步中,调用源系统接口获取数据是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用每刻接口`/api/openapi/reference/data/detail/query`,并对获取的数据进行加工处理。 #### 接口配置与请求参数 首先,我们需要配置元数据以便正确调用每刻的API接口。以下是元数据配置的详细信息: ```json { "api": "/api/openapi/reference/data/detail/query", "method": "POST", "number": "name", "id": "bizCode", "idCheck": true, "condition": [ [ { "field": "enabled", "logic": "eq", "value": "true" } ] ], "request": [ { "field": "referenceDataBizCode", "label": "档案编码", "type": "string", "value": "bm" }, { "field": "keyword", "label": "根据选项名称和选项编码模糊查询", "type": "string" }, { "field": "offset", "label": "分页起始", "type": "string", "describe": "默认值0" }, { "field": "pageSize", "label": "分页条数", "type": "string", "describe":"默认值50,最大值是100", “value”: “50” }, { “field”: “updatedStartAt”, “label”: “最近修改时间,时间戳”, “type”: “string”, “describe”: “查询在此时间及之后修改的数据”, “value”: “{LAST_SYNC_TIME}000” }, { “field”: “updatedEndAt”, “label”: “最近修改时间,时间戳”, “type”: “string”, “describe”:“查询在此时间及之前修改的数据”, “value”:“{CURRENT_TIME}000” } ] } ``` #### 请求参数解析 1. **referenceDataBizCode**: 档案编码,固定值为"bm"。 2. **keyword**: 用于模糊查询选项名称和选项编码。 3. **offset**: 分页起始位置,默认为0。 4. **pageSize**: 分页条数,默认为50,最大值为100。 5. **updatedStartAt**: 最近修改时间的起始时间戳,用于查询在此时间及之后修改的数据。 6. **updatedEndAt**: 最近修改时间的结束时间戳,用于查询在此时间及之前修改的数据。 #### 数据请求与清洗 在发送请求时,我们需要确保请求体包含上述所有必要参数。以下是一个示例请求体: ```json { “referenceDataBizCode”:“bm”, “keyword”:“部门”, “offset”:“0”, “pageSize”:“50”, “updatedStartAt”:“1633046400000”, // 示例开始时间戳 “updatedEndAt”:“1633132800000” // 示例结束时间戳 } ``` 发送请求后,我们会收到一个包含部门信息的响应。接下来,需要对这些数据进行清洗,以确保其符合目标系统的要求。 #### 数据转换与写入 清洗后的数据需要进行转换,以适应目标系统(如金蝶部门)的格式。假设目标系统要求的数据格式如下: ```json { ”departmentId“:“12345”, ”departmentName“:“销售部” } ``` 我们需要将每刻返回的数据字段映射到目标系统所需的字段。例如: - `bizCode` -> `departmentId` - `name` -> `departmentName` 通过轻易云平台提供的数据转换功能,可以轻松实现这一映射过程。以下是一个简单的映射示例: ```json { ”departmentId“:“{{bizCode}}”, ”departmentName“:“{{name}}” } ``` #### 实践中的注意事项 1. **分页处理**:确保处理大数据量时正确实现分页逻辑,以避免遗漏或重复数据。 2. **错误处理**:捕获并处理API调用中的错误,如网络问题、无效参数等,以提高系统稳定性。 3. **性能优化**:根据实际需求调整分页大小和请求频率,以优化性能。 通过上述步骤,我们可以高效地调用每刻接口获取并加工数据,为后续的数据集成奠定坚实基础。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image) ### 利用轻易云数据集成平台实现ETL转换并写入金蝶云星空API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一步。本文将详细探讨如何利用轻易云数据集成平台,将已经集成的源平台数据通过ETL转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 配置元数据 首先,我们需要了解元数据配置,这是进行ETL转换和数据写入的基础。以下是针对金蝶云星空API接口的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FName","label":"部门名称","type":"string","value":"{name}"}, {"field":"FNumber","label":"编码","type":"string","value":"{bizCode}"}, {"field":"FCreateOrgId","label":"创建组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{parentCode}"}, {"field":"FUseOrgId","label":"使用组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{parentCode}"}, {"field":"FHelpCode","label":"助记码","type":"string"}, {"field":"FDescription","label":"描述","type":"string"} ], "otherRequest": [ {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"BD_Department"}, {"field":"Operation","label":"执行的操作","type":"string","value":"BatchSave"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)", "value": "false"} ] } ``` #### 数据请求与清洗 在ETL流程中,首先需要从源系统请求数据并进行清洗。这一步确保了数据的一致性和准确性,为后续的转换和写入奠定基础。假设我们已经完成了这一步,接下来进入关键的转换与写入阶段。 #### 数据转换与写入 1. **字段映射**:根据元数据配置,将源系统的数据字段映射到目标系统所需的字段。例如,将源系统中的`name`字段映射到金蝶云星空中的`FName`字段。 2. **数据解析**:对于一些特殊字段,需要进行解析。例如,`FCreateOrgId`和`FUseOrgId`字段使用了`ConvertObjectParser`解析器,通过传递参数`FNumber`来完成解析。这一步确保了复杂结构的数据能够正确转换。 3. **构建请求体**:根据元数据配置构建API请求体。以下是一个示例请求体: ```json { "FormId": "BD_Department", "Operation": "BatchSave", "IsAutoSubmitAndAudit": true, "IsVerifyBaseDataField": false, "array": [ { "FName": "<部门名称>", "FNumber": "<编码>", "FCreateOrgId": { "FNumber": "<创建组织编码>" }, "FUseOrgId": { "FNumber": "<使用组织编码>" }, "FHelpCode": "<助记码>", "FDescription": "<描述>" } ] } ``` 4. **发送请求**:通过HTTP POST方法,将构建好的请求体发送到金蝶云星空API接口。以下是一个示例代码片段: ```python import requests url = 'https://api.kingdee.com/batchSave' headers = {'Content-Type': 'application/json'} data = { # 构建好的请求体 } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print("Data successfully written to Kingdee Cloud.") else: print("Failed to write data:", response.text) ``` #### 实时监控与错误处理 在整个过程中,实时监控和错误处理是不可或缺的部分。轻易云平台提供了实时监控功能,可以随时查看数据流动和处理状态。一旦出现错误,可以迅速定位问题并进行修正。例如,如果某个字段解析失败,可以通过日志查看具体原因,并及时调整元数据配置或源系统的数据格式。 通过上述步骤,我们成功地将源平台的数据经过ETL转换后写入到了金蝶云星空API接口。这不仅提升了业务流程的自动化程度,也确保了数据的一致性和准确性。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T21.png~tplv-syqr462i7n-qeasy.image)