轻易云平台实现ETL转换并写入MongoDB的方案

  • 轻易云集成顾问-叶威宏
### YS采购入库集成帆软MongoDB——用友BIP数据高效对接方案 在企业信息化系统中,数据的无缝对接与精准处理是关键。本文将分享一个实际案例:如何利用轻易云数据集成平台,将用友BIP中的YS采购入库数据高效整合到MongoDB数据库,助力业务流程优化与决策支持。 #### 用友BIP接口调用与分页处理 首先,通过调用用友BIP提供的数据获取API `/yonbip/scm/purinrecord/list`,我们能够定时抓取最新的采购入库记录。鉴于业务需求和接口限制,我们需要特别关注分页和限流处理。为确保每次请求都能获取完整、准确的数据,可以通过页码参数精确控制查询范围,并在脚本或任务调度中实现自动翻页机制。这不仅避免了漏单,同时也保证了系统稳定性。 #### MongoDB定制化映射及快速写入 面对从用友BIP获取的海量数据,如何快速、高效地写入到MongoDB成为另一个技术挑战。在此过程中,我们可以针对不同字段进行定制化的数据映射,以适应两个系统之间格式差异。例如,可使用特定字典转换工具,将日期格式从YYYY-MM-DD统一转换为ISODate。在完成数据清洗后,通过MongoDB的批量插入API `Insert` 实现一次性大规模的数据注入,此举极大提升了处理效率。 #### 异常处理与错误重试机制 为了进一步增强系统的可靠性,在整个数据对接环节引入异常处理机制。当发生网络超时、接口响应失败等异常情况时,该机制可自动记录日志并触发重试操作。同时,为防止重复插入或者遗漏,可基于唯一键进行去重校验,从而确保最终一致性和完备性。 通过上述步骤,我们不仅实现了用友BIP至MongoDB间的数据无缝流转,还充分考虑了性能优化、安全保障等各方面要素。这一实践既展示了平台强大的元数据管理能力,也为类似场景下的数据集成提供了一种行之有效的方法论。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D31.png~tplv-syqr462i7n-qeasy.image) ### 用友BIP接口/yonbip/scm/purinrecord/list数据调用与加工 在数据集成的生命周期中,调用源系统接口是关键的第一步。本文将深入探讨如何通过轻易云数据集成平台调用用友BIP接口`/yonbip/scm/purinrecord/list`获取并加工数据。 #### 接口概述 用友BIP提供的`/yonbip/scm/purinrecord/list`接口主要用于查询采购入库记录。该接口采用POST请求方式,支持分页查询和多条件过滤。以下是该接口的元数据配置: ```json { "api": "/yonbip/scm/purinrecord/list", "effect": "QUERY", "method": "POST", "number": "code", "id": "purInRecords_id", "request": [ {"field": "pageIndex", "label": "页码", "type": "string", "describe": "例:1 默认值:1", "value": "1"}, {"field": "pageSize", "label": "每页数", "type": "string", "describe": "例:10 默认值:10", "value": "500"}, {"field": "isSum", "label": "查询表头", "type": "string", "describe": "例:false 默认值:false"}, {"field": "simpleVOs", "label": "查询条件", "type": "object", "children":[ {"field":"field1","label":"过滤条件1","type":"object","children":[ {"field":"field","label":"查询字段","type":"string","parent":"params","value":"pubts"}, {"field":"op","label":"比较符","type":"string","parent":"params","value":"egt"}, {"field":"value1","label":"值1","type":"string","describe":"“and” | “or” | “and not” | “or not”,若设置,必填expr1和expr2属性,忽略 column和condition。","value":"{{LAST_SYNC_TIME|datetime}}","parent":"params"} ]} ] }, {"field":"queryOrders", "label":"排序字段", "type":"array", "children":[ {"field":"field","label":"排序条件字段","type":"string","describe":"必须传实体上有的字段;主表字段查询时字段名(例: id);子表字段查询是子表对象.字段名(例:purchaseOrders.id);参照类型只能传id(例:按物料查询只能传物料id,不能传物料code) 例:id","value":"id","parent":"queryOrders"}, {"field":"order","label":"顺序","type":"string","describe":"正序(asc);倒序(desc) 例:asc","value":"asc","parent":"queryOrders"} ] } ] } ``` #### 请求参数详解 1. **分页参数** - `pageIndex`: 页码,默认值为1。 - `pageSize`: 每页记录数,默认值为500。 2. **查询表头** - `isSum`: 是否查询表头,默认值为false。 3. **过滤条件** - `simpleVOs`: 查询条件对象,其中包含一个或多个过滤条件。 - `field`: 查询字段,这里使用的是`pubts`(公共时间戳)。 - `op`: 比较符,这里使用的是`egt`(大于等于)。 - `value1`: 比较值,这里使用动态变量`{{LAST_SYNC_TIME|datetime}}`表示上次同步时间。 4. **排序字段** - `queryOrders`: 排序条件数组。 - `field`: 排序字段,这里使用的是主键`id`。 - `order`: 排序顺序,这里使用正序(asc)。 #### 数据请求与清洗 在实际操作中,我们首先需要构建请求体,根据元数据配置生成符合要求的JSON结构。例如: ```json { "pageIndex": 1, "pageSize": 500, "isSum": false, ... } ``` 发送请求后,我们会得到一个包含采购入库记录的响应数据。接下来,需要对这些数据进行清洗和转换,以便后续处理。 #### 数据转换与写入 清洗后的数据通常需要转换成目标系统所需的格式,并写入到相应的数据存储中。在本案例中,我们将清洗后的采购入库记录写入到帆软MongoDB数据库中。这一步骤涉及到数据格式的转换、字段映射等操作。 例如,将用友BIP返回的数据结构转换为MongoDB所需的文档格式: ```json { "_id": "<purInRecords_id>", ... } ``` 通过轻易云平台提供的数据转换工具,可以方便地完成这些操作,实现不同系统间的数据无缝对接。 #### 总结 通过调用用友BIP接口`/yonbip/scm/purinrecord/list`,我们可以高效地获取采购入库记录,并通过轻易云平台进行清洗、转换和写入,实现不同系统间的数据集成。这一过程不仅提高了业务透明度,还极大提升了工作效率。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/S3.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入MongoDB 在数据集成生命周期的第二阶段,关键任务是将已经从源平台获取的数据进行ETL(Extract, Transform, Load)转换,并将其写入目标平台MongoDB。本文将详细探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。 #### 配置元数据 首先,我们需要根据提供的元数据配置,定义要写入MongoDB的数据格式。以下是具体的元数据配置: ```json { "api": "Insert", "effect": "EXECUTE", "method": "POST", "number": "id", "id": "id", "name": "id", "idCheck": true, "request": [ {"field":"bustype_name","label":"交易类型名称","type":"string","describe":"交易类型名称","value":"{bustype_name}"}, {"field":"vendor_name","label":"供应商名称","type":"string","describe":"供应商名称","value":"{vendor_name}"}, {"field":"purchaseOrg_name","label":"采购组织名称","type":"string","describe":"采购组织名称","value":"{purchaseOrg_name}"}, {"field":"vouchdate","label":"单据日期","type":"string","describe":"单据日期","value":"{vouchdate}"}, {"field":"code","label":"单据编号","type":"string","describe":"单据编号","value":"{code}"}, {"field":"warehouse_name","label":"仓库名称","type":"string","describe":"仓库名称","value":"{warehouse_name}"}, {"field":"vendor_code","label":"供应商编码","type":"string","describe":"供应商编码","value":"{vendor_code}"}, {"field":"status","label":"单据状态","type":"int","describe":"单据状态, 0:未提交、1:已提交、", "value": "{status}"} // ... (省略其他字段) ], "otherRequest":[ {"field": "collectionName", "label": "集合名字", "type": "string", "describe": "集合名字", "value": "PurchaseWarehousing"} ], "buildModel": true } ``` #### 数据转换与写入 在这个过程中,我们需要完成以下几个步骤: 1. **提取数据**:从源平台提取原始数据。 2. **数据清洗**:对提取的数据进行清洗和预处理,确保数据质量。 3. **数据转换**:根据目标平台的要求,将清洗后的数据转换为相应的格式。 4. **数据写入**:将转换后的数据通过API接口写入MongoDB。 ##### 提取与清洗 假设我们已经从源平台提取到如下示例数据: ```json { "bustype_name": "采购入库", "vendor_name": "供应商A", // ... (省略其他字段) } ``` 在清洗过程中,我们需要确保每个字段的数据类型和内容符合要求。例如,`status`字段必须是整数类型,且值为0或1。 ##### 数据转换 根据元数据配置,我们需要将上述示例数据转换为如下格式: ```json { "_id": "{purInRecords_id}", "bustype_name": "{bustype_name}", // ... (省略其他字段) } ``` 这里需要注意的是,`_id`字段对应于MongoDB中的主键,必须唯一且非空。我们可以使用`purInRecords_id`作为该字段的值。 ##### 数据写入 最后一步是通过API接口将转换后的数据写入MongoDB。根据元数据配置,我们使用POST方法调用Insert API,并传递相应的JSON对象。 以下是一个示例请求: ```http POST /Insert HTTP/1.1 Host: your-mongodb-api-endpoint Content-Type: application/json { "_id": "{purInRecords_id}", // ... (省略其他字段) } ``` #### 实践案例 假设我们有一条待处理的数据记录: ```json { "_id": "1234567890", // ... (省略其他字段) } ``` 通过上述步骤,我们可以成功地将这条记录插入到MongoDB中的`PurchaseWarehousing`集合中。 在实际操作中,还需考虑错误处理和日志记录等问题,以确保整个ETL过程的稳定性和可靠性。例如,可以设置重试机制来处理网络故障或API调用失败的情况。 以上就是使用轻易云数据集成平台进行ETL转换并写入MongoDB的详细过程。通过合理配置元数据和API接口,可以高效地实现不同系统间的数据集成。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T27.png~tplv-syqr462i7n-qeasy.image)