ETL转换和写入金蝶云星空:技术步骤详解

  • 轻易云集成顾问-吕修远
### 仓库方案-I0140:吉客云数据集成到金蝶云星空 在本次系统对接集成案例中,我们将详细探讨如何通过仓库方案-I0140,实现吉客云的数据无缝集成到金蝶云星空。此方案旨在帮助企业快速、高效地处理和同步大量仓储数据。 #### 数据获取与写入API接口 我们利用了吉客云的`erp.warehouse.get` API来定时可靠地抓取仓库数据,并通过金蝶云星空的`batchSave` API进行批量写入。在实际操作过程中,需要特别关注以下几点: 1. **高吞吐量的数据写入能力** 采用了基于分布式架构的高吞吐量设计,使得大量来自吉客云的数据能够迅速传输并存储到金蝶云星空,极大提高了业务处理效率。 2. **分页和限流问题** 吉客云接口有请求分页和限流要求。为确保数据不会漏单,我们实现了自动化分页逻辑及限流控制机制,从而保障全程无缝衔接。 3. **自定义数据转换逻辑** 两个系统间的数据结构存在差异,为适应特定业务需求,配置了自定义数据转换规则,将不匹配字段精准映射并实时调整格式,以确保数据完整、准确导入。 4. **集中监控与异常处理机制** 提供实时监控功能,对每一步操作状态进行跟踪,同时设置告警系统及时发现问题。另外,还包含错误重试机制,有效减少因网络或其他不可抗拒因素导致的数据丢失风险。 5. **质量监控与日志记录** 从抓取到写入全流程都引入了严格的数据质量监控及详尽的日志记录模块,一旦出现异常,可立即审查了解具体情况并快速修复问题,提高整体运行稳定性。 该技术案例展示不仅注重以技术手段解决复杂对接问题,更突显出整合过程中的关键细节管理技巧。下一部分将深入解析具体实施步骤,包括从吉客云提取原始数据信息,到最终准确导入至金蝶云星空各个环节所需执行的详细操作规范。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/D29.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.warehouse.get获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将详细探讨如何通过调用吉客云接口`erp.warehouse.get`来获取并加工数据。 #### 接口配置与请求参数 在元数据配置中,`erp.warehouse.get`接口被定义为一个查询操作(effect: "QUERY"),使用POST方法进行请求。以下是具体的请求参数配置: - **页码 (pageIndex)**: 用于分页查询,类型为字符串。 - **页大小 (pageSize)**: 每页返回的数据条数,类型为字符串,默认值为50。 - **起始开始时间 (gmtModifiedStart)**: 数据修改的起始时间,类型为字符串,使用模板变量`{{LAST_SYNC_TIME|datetime}}`自动填充。 - **结束修改时间 (gmtModifiedEnd)**: 数据修改的结束时间,类型为字符串,使用模板变量`{{CURRENT_TIME|datetime}}`自动填充。 这些参数确保了我们能够灵活地控制数据查询的范围和数量,从而提高数据获取的效率和准确性。 #### 自动填充与条件过滤 元数据配置中的`autoFillResponse`属性设置为true,这意味着响应的数据将自动填充到目标系统中,无需手动干预。这一特性极大简化了数据处理流程,提高了工作效率。 此外,我们还设置了两个条件过滤器: 1. **condition_bk**: 备用条件过滤器,用于在特定情况下启用。这里我们设置了字段`isBlockup`等于0(未封存)的条件。 2. **condition**: 主条件过滤器,同样设置了字段`isBlockup`等于0的条件。 这些条件确保我们只获取未封存的仓库数据,从而保证数据的有效性和实用性。 #### 数据请求与清洗 在实际操作中,我们首先需要构建请求体,并调用吉客云接口获取原始数据。以下是一个示例请求体: ```json { "pageIndex": "1", "pageSize": "50", "gmtModifiedStart": "{{LAST_SYNC_TIME|datetime}}", "gmtModifiedEnd": "{{CURRENT_TIME|datetime}}" } ``` 通过POST方法将上述请求体发送到吉客云接口后,我们会收到一个包含仓库信息的数据集。接下来,我们需要对这些原始数据进行清洗和转换,以便后续处理和写入目标系统。 #### 数据转换与写入 在清洗过程中,我们可以根据业务需求对数据进行各种转换操作。例如,将时间戳格式转换为标准日期格式、合并或拆分字段等。以下是一个简单的数据转换示例: ```python def transform_data(raw_data): transformed_data = [] for item in raw_data: transformed_item = { "warehouseCode": item["warehouseCode"], "warehouseName": item["warehouseName"], "lastModified": convert_timestamp_to_date(item["gmtModified"]) } transformed_data.append(transformed_item) return transformed_data ``` 在这个示例中,我们将原始数据中的时间戳字段`gmtModified`转换为了标准日期格式,并保留了仓库代码和名称字段。完成转换后,这些数据将被写入目标系统,实现最终的数据集成。 通过上述步骤,我们成功地调用了吉客云接口获取仓库信息,并对其进行了清洗和转换,为后续的数据处理奠定了基础。这一过程展示了轻易云数据集成平台在处理异构系统间数据时的高效性和灵活性。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台——金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术步骤和元数据配置说明。 #### 1. 数据请求与清洗 在这一步,我们假设已经从源系统中获取了仓库相关的数据,并进行了必要的数据清洗。接下来,我们将重点放在如何使用轻易云数据集成平台将这些清洗后的数据转换为金蝶云星空API接口所需的格式。 #### 2. 数据转换与写入 我们使用轻易云数据集成平台提供的ETL工具,将源系统的数据转换为目标系统所需的格式。以下是具体的元数据配置和操作步骤: ##### 元数据配置解析 ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "FName", "label": "仓库名称", "type": "string", "value": "{warehouseName}"}, {"field": "FNumber", "label": "编码", "type": "string", "value": "{warehouseCode}"}, {"field": "FStockProperty", "label": "仓库属性", "type": "string", "value": "1"}, {"field": "FCreateOrgId", "label": "FCreateOrgId", "type": "string", "value":"I0140","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field": "FUseOrgId", "label":"FUseOrgId","type":"string", "value":"I0140","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FAllowMinusQty","label":"允许即时库存","type":"string","value":"true"} ], ... } ``` ##### 请求字段解析 - **FName(仓库名称)**:从源系统中提取的仓库名称,类型为字符串。 - **FNumber(编码)**:从源系统中提取的仓库编码,类型为字符串。 - **FStockProperty(仓库属性)**:固定值“1”,表示某种特定属性。 - **FCreateOrgId(创建组织ID)**:固定值“I0140”,通过`ConvertObjectParser`解析器将其转换为目标系统所需格式。 - **FUseOrgId(使用组织ID)**:同样是固定值“I0140”,并通过相同解析器处理。 - **FAllowMinusQty(允许即时库存)**:固定值“true”,表示允许即时库存。 ##### 其他请求字段解析 ```json { ... { "field":"FormId", "label":"业务对象表单Id", "type":"string", "describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value":"BD_STOCK" }, { "field":"Operation", "label":"执行的操作", "type":"string", "describe":"执行的操作", "value":"BatchSave" }, { "field":"IsAutoSubmitAndAudit", "label":"提交并审核", "type":"bool", "describe":"提交并审核", "value":"true" }, { "field":"IsVerifyBaseDataField", "label":"验证基础资料", "type":"bool", "describe": "是否验证所有的基础资料有效性,布尔类,默认false(非必录)", "value": true } } ``` - **FormId(业务对象表单Id)**:指定金蝶系统中的表单ID,这里是“BD_STOCK”。 - **Operation(执行的操作)**:指定操作类型,这里是“BatchSave”。 - **IsAutoSubmitAndAudit(提交并审核)**:布尔值,表示是否自动提交并审核,设置为`true`。 - **IsVerifyBaseDataField(验证基础资料)**:布尔值,表示是否验证所有基础资料有效性,设置为`true`。 ##### 操作方法配置 ```json { ... { ... method: 'batchArraySave', rows:100, rowsKey:'array' } } ``` 此部分配置了批量保存的方法`batchArraySave`,每次处理100行数据,并使用键名`array`来存储这些行。 #### 实际操作步骤 1. **准备数据**:从源系统中提取需要的数据,例如仓库名称、编码等信息,并进行必要的数据清洗和预处理。 2. **配置元数据**:按照上述元数据配置,将清洗后的数据映射到相应字段中。 3. **调用API接口**:使用轻易云平台提供的API调用功能,将处理后的数据发送到金蝶云星空API接口。 通过以上步骤,我们可以实现从源系统到目标系统的数据无缝对接,并确保每个环节都透明可控。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T7.png~tplv-syqr462i7n-qeasy.image)