ETL转换:从轻易云到金蝶云星空的技术细节

  • 轻易云集成顾问-何语琴
### 吉客云数据集成到金蝶云星空:仓库方案-I0137 在本次技术案例中,我们聚焦于如何高效地将吉客云中的数据集成到金蝶云星空,具体实施方案为"仓库方案-I0137"。这一过程通过利用轻易云数据集成平台的多项关键特性,实现了对吉客云和金蝶云星空之间大规模、高复杂度的数据处理和转换,确保了业务运营的稳定性与效率。 首先,需要解决的是如何从吉客云系统中获得所需的数据。我们依托于吉客云提供的`erp.warehouse.get` API接口,它支持按需、定时可靠地抓取仓库相关信息。这一接口允许我们获取实时的库存数据,并具有分页功能以应对大量数据请求时可能出现的限流问题。 接下来是将这些获取到的数据批量写入至金蝶云星空,这一步使用了`batchSave` API接口。该接口具备高吞吐量的数据写入能力,使得大量数据能够迅速且稳健地进入目标系统。在部署这个过程中,有几个技术要点需要特别关注: 1. **自定义数据转换逻辑**:由于吉客云与金蝶云星空之间存在一定的数据格式差异,必须设计并实现适配性的自定义转换逻辑来确保两端系统能无缝衔接。 2. **实时监控与日志记录**:为了保证整个流程环节不中断、不漏单,我们引入了实时监控和详细日志记录机制,对每一个操作步骤进行精确追踪。一旦发现异常情况,可以及时触发告警并执行错误重试机制。 3. **API资产管理优化**:借助统一控制台全面掌握API资产使用情况,通过集中監控这些API调用频率及性能参数,从而合理调配资源,提高整体运作效率。 最后,在实际应用中,还加入了一系列针对特殊情景下的数据质量检查功能,如异常检测等,以保证最终同步至金蝶Cloud端的数据准确无误。这也归功于轻易平台提供的强大可视化工具,使得配置和调整过程变得更加直观,极大简化了整个项目周期内需求变更后的调整工作。 通过细致周密的一系列技术实现,本案圆满完成,并显著提升了企业在物流管理上的信息一致性及响应速度。接下来,我们将进一步探讨实施细节以及遇到的问题与解决方式,敬请期待后续内容。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/D4.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.warehouse.get获取并加工数据的技术案例 在数据集成生命周期的第一步,我们需要调用源系统吉客云的接口`erp.warehouse.get`来获取并加工数据。以下将详细介绍如何通过轻易云数据集成平台配置元数据,实现这一过程。 #### 接口配置与调用 首先,我们需要了解接口`erp.warehouse.get`的基本信息和参数配置。根据提供的元数据配置,接口采用POST方法进行请求,主要参数如下: - **页码(pageIndex)**:用于分页请求的数据页码。 - **页大小(pageSize)**:每页返回的数据条数,默认值为50。 - **起始开始时间(gmtModifiedStart)**:用于过滤修改时间在此时间之后的数据,动态值为上次同步时间。 - **结束修改时间(gmtModifiedEnd)**:用于过滤修改时间在此时间之前的数据,动态值为当前时间。 这些参数确保了我们能够高效地分页获取最新的仓库数据,并且避免了重复处理已经同步过的数据。 #### 请求参数构建 在构建请求参数时,我们需要特别注意动态值的处理。以下是一个示例请求体: ```json { "pageIndex": "1", "pageSize": "50", "gmtModifiedStart": "{{LAST_SYNC_TIME|datetime}}", "gmtModifiedEnd": "{{CURRENT_TIME|datetime}}" } ``` 其中,`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`是平台内置的动态变量,用于自动填充上次同步时间和当前时间。 #### 数据过滤与条件设置 为了确保只获取有效的数据,我们需要设置过滤条件。根据元数据配置,我们使用以下条件: - **isBlockup = 0**:表示只获取未封存的仓库数据。 这个条件可以通过以下方式在请求中体现: ```json { "condition": [ { "field": "isBlockup", "logic": "eqv2", "value": "0" } ] } ``` #### 自动填充响应 轻易云平台支持自动填充响应,这意味着我们可以直接将API返回的数据映射到目标系统中,无需手动处理。这极大地简化了数据处理流程,提高了效率。 #### 实际应用案例 假设我们需要从吉客云获取所有未封存的仓库信息,并将其写入目标系统。以下是具体步骤: 1. **配置元数据**:根据上述参数和条件,在轻易云平台上配置元数据。 2. **发送请求**:平台会自动根据配置发送POST请求至`erp.warehouse.get`接口。 3. **处理响应**:平台接收到响应后,会根据自动填充规则,将数据映射到目标系统中。 4. **监控与日志记录**:通过平台提供的实时监控功能,可以查看每次请求和响应的详细日志,确保数据处理过程透明可追溯。 #### 示例代码片段 以下是一个示例代码片段,用于展示如何在轻易云平台上实现上述过程: ```python import requests import datetime # 获取当前时间和上次同步时间 current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') last_sync_time = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S') # 构建请求体 request_body = { "pageIndex": "1", "pageSize": "50", "gmtModifiedStart": last_sync_time, "gmtModifiedEnd": current_time, "condition": [ { "field": "isBlockup", "logic": "eqv2", "value": "0" } ] } # 发送POST请求 response = requests.post("https://api.jikecloud.com/erp.warehouse.get", json=request_body) # 打印响应结果 print(response.json()) ``` 通过上述步骤和代码示例,我们可以高效地调用吉客云接口`erp.warehouse.get`获取并加工仓库数据,为后续的数据转换与写入打下坚实基础。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/S24.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台ETL转换至金蝶云星空API接口 在数据集成生命周期的第二步,我们重点关注如何将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中的技术细节。 #### API接口配置与元数据解析 首先,我们需要理解元数据配置中的各个字段及其作用。以下是关键字段的解释: - `api`: 指定要调用的API接口名称,此处为`batchSave`。 - `method`: HTTP请求方法,此处为`POST`。 - `idCheck`: 是否进行ID检查,布尔值。 - `request`: 包含具体的数据字段映射和转换规则。 ##### 数据字段映射与转换 在`request`部分,每个字段都有特定的配置,包括字段名、标签、类型和值。以下是一些关键字段的解析: 1. **仓库名称 (FName)**: ```json {"field":"FName","label":"仓库名称","type":"string","value":"{warehouseName}"} ``` 该字段表示仓库名称,类型为字符串,值从源数据中的`warehouseName`字段获取。 2. **编码 (FNumber)**: ```json {"field":"FNumber","label":"编码","type":"string","value":"{warehouseCode}"} ``` 该字段表示仓库编码,类型为字符串,值从源数据中的`warehouseCode`字段获取。 3. **仓库属性 (FStockProperty)**: ```json {"field":"FStockProperty","label":"仓库属性","type":"string","value":"1"} ``` 该字段表示仓库属性,固定值为`1`。 4. **创建组织ID (FCreateOrgId)** 和 **使用组织ID (FUseOrgId)**: ```json {"field":"FCreateOrgId","label":"FCreateOrgId","type":"string","value":"I0137","parser":{"name":"ConvertObjectParser","params":"FNumber"}} {"field":"FUseOrgId","label":"FUseOrgId","type":"string","value":"I0137","parser":{"name":"ConvertObjectParser","params":"FNumber"}} ``` 这两个字段都使用了一个名为`ConvertObjectParser`的解析器,将固定值`I0137`转换为符合金蝶系统要求的格式。 5. **允许即时库存 (FAllowMinusQty)**: ```json {"field":"FAllowMinusQty","label":"允许即时库存","type":"string","value":"true"} ``` 该字段表示是否允许即时库存,固定值为布尔类型的字符串`true`。 ##### 其他请求参数 除了具体的数据映射外,还有一些全局参数需要配置: 1. **业务对象表单ID (FormId)**: ```json {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"BD_STOCK"} ``` 此参数指定了业务对象表单ID,在本例中为仓库表单ID `BD_STOCK`。 2. **执行操作 (Operation)**: ```json {"field":"Operation","label":"执行的操作","type":"string","describe":"执行的操作","value":"BatchSave"} ``` 指定了执行操作类型,此处为批量保存 `BatchSave`。 3. **提交并审核 (IsAutoSubmitAndAudit)**: ```json {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","describe":"提交并审核","value":"true"} ``` 表示是否自动提交并审核,布尔值 `true`。 4. **验证基础资料 (IsVerifyBaseDataField)**: ```json {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)", "value": "true"} ``` 表示是否验证所有基础资料有效性,布尔值 `true`。 #### 操作方法与批量处理 在元数据配置中,还定义了操作方法和批量处理相关参数: ```json "operation":{"method": "batchArraySave", "rows": 100, "rowsKey": "array"} ``` - `method`: 指定了操作方法,此处为批量保存方法 `batchArraySave`。 - `rows`: 每次批量处理的数据行数,此处设置为100行。 - `rowsKey`: 批量处理时使用的数据键,此处设置为数组形式 `array`。 #### 实际应用案例 假设我们有一组来自源平台的数据,需要通过ETL转换后写入金蝶云星空。以下是一个简化示例: 源数据: ```json [ { "warehouseName": "主仓库", "warehouseCode": "WH001" }, { "warehouseName": "分仓库", "warehouseCode": "WH002" } ] ``` 通过上述元数据配置和ETL转换规则,这些数据将被转换并写入金蝶云星空系统。每个记录将按照配置生成相应的API请求,并通过HTTP POST方法发送到金蝶云星空API接口,实现数据同步。 以上就是轻易云数据集成平台中,将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收格式的一些关键技术细节和实际应用案例。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/T17.png~tplv-syqr462i7n-qeasy.image)