ETL转换和数据写入吉客云的实战应用

  • 轻易云集成顾问-黄宏棵
### 案例分享:用友BIP数据集成到吉客云 在现代企业信息系统的对接过程中,实现不同平台间的数据集成是一个复杂而关键的任务。本文聚焦于如何通过轻易云数据集成平台,将用友BIP中的物料数据无缝地整合到吉客云,具体方案名称为:YS-物料--->吉客云-货品。 #### 技术背景与挑战 为了实现这一目标,我们需要解决以下几个技术难点: 1. **高效的数据写入**:我们需要支持高吞吐量的数据写入能力,使得大量物料数据能够快速被导入到吉客云中,提升整体处理时效性。 2. **实时监控和告警**:提供集中化的监控和告警机制,以便实时跟踪每个数据集成任务的状态和性能指标,这也包括异常检测和及时处理。 3. **API调用及分页问题**:由于用友BIP接口(`/yonbip/digitalModel/product/querylist`)存在分页限制,需要设计可靠的抓取策略以确保所有所需物料信息都能完整获取,不漏单。 4. **格式转换与映射**:将来自用友BIP的数据格式准确转换并映射至符合吉客云要求的结构,这是实现两系统无缝衔接的重要一步。 5. **错误重试与日志记录**:针对可能发生的数据传输错误及网络故障等问题,需建立健全的错误重试机制以及详尽的日志记录功能,以保障整个流程稳定运行,并且可追溯分析异常情况。 #### 数据提取与加载流程概述 首先,通过调用用友BIP接口`/yonbip/digitalModel/product/querylist`定期抓取商品物料信息。在此过程中,为了避免因分页限制导致的信息不全,我们采用分段请求方式逐页获取。这不仅确保了覆盖全部所需数据,同时也减少了单次请求负载,提高可靠性。随后,在轻易云平台上配置元数据转换逻辑,对获取到的数据进行清洗、整理并适配为符合吉客云API (`erp.goods.skuimportbatch`) 规范格式后批量写入。同时,通过自定义额外字段比对防止重复录入或遗漏,最大限度保证了业务连续性。此外,还设置预警通知,当出现响应延迟或者失败时能够第一时间发现并处理,从而优化调度策略。... --- 接下来,我们将详细讲解此案例实操中的具体步骤及遇见的问题解决方法,包括如何正确使用上述API、实施有效控制机制,以及实现稳定、高效、安全的大规模数据信息跨系统交互。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D7.png~tplv-syqr462i7n-qeasy.image) ### 用友BIP接口数据集成与加工技术案例 在数据集成生命周期的第一步,我们需要调用源系统用友BIP接口`/yonbip/digitalModel/product/querylist`获取并加工数据。本文将详细探讨该接口的调用方法及其元数据配置,并展示如何通过轻易云数据集成平台进行高效的数据处理。 #### 接口调用与元数据配置 用友BIP提供的`/yonbip/digitalModel/product/querylist`接口用于查询产品列表。该接口采用POST请求方式,支持分页查询和时间戳过滤。以下是该接口的元数据配置: ```json { "api": "/yonbip/digitalModel/product/querylist", "effect": "QUERY", "method": "POST", "number": "code", "id": "id", "idCheck": true, "request": [ { "field": "pageIndex", "label": "页码", "type": "string", "describe": "例:1 默认值:1", "value": "1" }, { "field": "pageSize", "label": "每页数", "type": "string", "describe": "例:10 默认值:10", "value": "200" }, { "field": "beganTime", "label": "开始时间(时间戳对比使用)", "type": "string", "describe": "例:false 默认值:false", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "endTime", "label": "结束时间(时间戳对比使用)", "type": "string", "value": "{{CURRENT_TIME|datetime}}" } ], "autoFillResponse": true } ``` #### 请求参数详解 1. **pageIndex**: 页码,默认为1。用于指定从哪一页开始查询。 2. **pageSize**: 每页记录数,默认为200。用于控制每次查询返回的记录数量。 3. **beganTime**: 开始时间,用于时间戳对比,默认值为上次同步时间(`{{LAST_SYNC_TIME|datetime}}`)。 4. **endTime**: 结束时间,用于时间戳对比,默认值为当前时间(`{{CURRENT_TIME|datetime}}`)。 这些参数确保了我们能够灵活地控制数据查询范围和批量大小,从而优化数据获取效率。 #### 数据请求与清洗 在轻易云数据集成平台中,我们首先需要配置上述请求参数,以便正确调用用友BIP接口。以下是一个示例请求体: ```json { "pageIndex": 1, "pageSize": 200, "_beganTime_":"2023-01-01T00:00:00Z", "_endTime_":"2023-12-31T23:59:59Z" } ``` 该请求体将返回从2023年初至年底的产品列表,每次最多返回200条记录。 #### 数据转换与写入 获取到原始数据后,我们需要进行必要的数据清洗和转换。例如,将产品编码字段统一格式化、去除重复记录等。轻易云平台提供了丰富的数据处理工具,可以方便地实现这些操作。 以下是一个简单的数据清洗示例: ```python def clean_data(data): # 去除重复记录 unique_data = {item['id']: item for item in data}.values() # 格式化产品编码 for item in unique_data: item['code'] = item['code'].strip().upper() return list(unique_data) ``` 清洗后的数据可以通过轻易云平台直接写入目标系统,如吉客云货品模块,实现无缝对接。 #### 实时监控与调试 在整个过程中,轻易云平台提供了实时监控和调试功能,可以随时查看数据流动状态和处理结果。这有助于及时发现并解决潜在问题,确保数据集成过程顺利进行。 通过以上步骤,我们成功实现了用友BIP接口的数据获取与加工,并为后续的数据转换与写入奠定了基础。在实际应用中,根据具体业务需求,还可以进一步优化和扩展这些操作,以提升整体效率和可靠性。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S18.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入吉客云API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)是关键步骤之一。本文将重点探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为目标平台吉客云API接口所能够接收的格式,最终写入目标平台。 #### 数据请求与清洗 在数据转换之前,首先需要从源系统中请求并清洗数据。假设我们已经完成了这一步,获取到了源系统中的物料信息。接下来,我们将这些数据转换为吉客云API所需的格式。 #### 数据转换与写入 元数据配置如下: ```json { "api": "erp.goods.skuimportbatch", "method": "POST", "idCheck": true, "request": [ {"field": "goodsName", "label": "货品名称", "type": "string", "value": "{{name.simplifiedName}}"}, {"field": "goodsNo", "label": "货品编码", "type": "string", "value": "{code}"}, {"field": "goodsAlias", "label": "货品别名", "type": "string", "value": "{{name.simplifiedName}}"}, {"field": "unitName", "label": "单位名称", "type": "string", "value": "{unitName}"}, {"field": "outSkuCode", "label": "SKU", "type": "string", "value": "{code}"}, {"field": "skuBarcode", "label": "条码", "type":"string","value":"{{detail.barCode}}"}, {"field":"skuName","label":"规格名称","type":"string"}, {"field":"isSerialManagement","label":"是否序列号管理","type":"string","describe":"是否序列号管理(1=是,0= 否)","value":"_function case '{{detail.serialNoManage}}' when true then '1' else '0' end"}, {"field":"goodsAttr","label":"货品属性","type":"string","describe":"货品属性1-成品2-半成品3-原料4-包装材料","value":"1"}, {"field":"ownerCode","label":"货主编码","type":"string","describe":"货品属性1-成品2-半成品3-原料4-包装材料","value":"119669"}, {"field":"cateCode","label":"货品分类","type":"string","value":"{manageClassCode}"}, {"field":"goodsField1","label":"型号","type":"string","value":"{{model.simplifiedName}}"} ] } ``` #### 配置解析 1. **API与方法**:我们使用`erp.goods.skuimportbatch` API,通过POST方法向吉客云发送请求。 2. **ID检查**:`idCheck`设置为true,确保每条记录都有唯一标识。 3. **字段映射**: - `goodsName`、`goodsAlias`、`goodsField1`: 从源数据的简化名称字段中提取。 - `goodsNo`、`outSkuCode`: 使用源数据中的编码字段。 - `unitName`: 使用源数据中的单位名称字段。 - `skuBarcode`: 从详细信息中提取条码。 - `isSerialManagement`: 根据详细信息中的序列号管理字段进行条件判断,如果为true则返回'1',否则返回'0'。 - `goodsAttr`: 固定值为'1',表示成品。 - `ownerCode`: 固定值为'119669'。 - `cateCode`: 使用源数据中的管理分类代码。 #### 实际操作步骤 1. **提取数据**:从源系统中提取物料信息,包括名称、编码、单位、条码等字段。 2. **转换数据**:根据上述元数据配置,将提取的数据进行格式转换。例如,将物料名称映射到吉客云的货品名称字段,将物料编码映射到SKU等。 3. **加载数据**:使用POST方法将转换后的数据通过API接口发送到吉客云。 以下是一个示例代码片段,用于将转换后的数据发送到吉客云: ```python import requests import json url = 'https://api.jikexun.com/erp/goods/skuimportbatch' headers = {'Content-Type': 'application/json'} data = { # 转换后的JSON对象 } response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print('Data successfully imported to JikeCloud') else: print(f'Failed to import data: {response.text}') ``` 通过上述步骤,我们实现了从源系统到目标平台的数据无缝对接,并确保了每个环节的数据准确性和一致性。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)