将源平台数据转换并写入MySQL目标平台的实践

  • 轻易云集成顾问-吴伟
### MySQL 数据集成到 MySQL 的高效实现:ZZ 刷新生产用料清单四化库存-制造一处-3 小时 在现代制造领域,实时准确的物料清单和库存数据对于保障生产计划的顺利进行至关重要。此次我们将分享一个实际运行案例——“ZZ 刷新生产用料清单四化库存-制造一处-3 小时”,重点展示如何通过系统对接,实现MySQL数据库到MySQL数据库的数据高效集成。 #### 方案背景与技术要点概述 该任务的核心目标是每隔三小时刷新一次生产用料清单及其对应的库存数据,以确保制造一处能够及时掌握最新数据。在此过程中,采用了高吞吐量的数据写入能力以及定制化的数据转换逻辑来匹配业务需求。以下几个关键点贯穿整个实施流程: 1. **高吞吐量数据写入**:为应对大量物料和库存记录,我们设计并优化了批量数据写入操作,通过 `execute` API 高效地将更新后的信息存储到目标MySQL数据库。 2. **实时监控与异常处理**:借助集中监控系统,实时跟踪这项重大任务,从而能够快速响应任何潜在的问题。此外,还实现了细致的错误重试机制,以确保即便出现问题也能迅速恢复,并保持稳定性。 3. **自定义数据转换**:由于源数据库中的物料和库存结构有一定差异,我们开发了一整套自定义转换逻辑,将原始数据映射调整至统一格式,为后续处理打下坚实基础。 这些技术要素共同构建出一个健壮且灵活的数据集成解决方案,有效满足业务要求并提升整体运营效率。在接下来的一系列文章中,我们将深入探讨具体实现步骤,以及如何应对各种可能遇到的问题。同样会详细讨论API接口使用、分页限流管理等技巧,以期为大家提供全方位的实践指导。 --- 以上开篇部分直接进入主题,从技术角度切入,为后续详细解析各环节做好铺垫。同时避免浮于表面的陈词滥调,使得文章内容更加紧凑、有深度。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/D12.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用MySQL接口获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细介绍如何通过轻易云数据集成平台调用MySQL接口`select`获取并加工数据。 #### 配置元数据 首先,我们需要配置元数据以便正确调用MySQL接口。以下是元数据配置的详细说明: ```json { "api": "select", "effect": "QUERY", "method": "POST", "id": "生产用料清单明细内码", "request": [ { "field": "main_params", "label": "主参数", "type": "object", "describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。", "value": "1", "children": [ { "field": "limit", "label": "限制结果集返回的行数", "type": "int", "describe": "必要的参数!LIMIT 子句用于限制查询结果返回的行数。它指定了查询应该返回的最大行数。例如,LIMIT 10 表示查询结果只包含最多 10 行数据。这对于分页查询非常有用,可以在每次查询中返回一定数量的结果。", "value": 1000 }, { "field": "offset", "label": "偏移量", "type": "int", "describe": "OFFSET 子句用于指定查询结果的起始位置或偏移量。它表示查询应该从结果集的哪一行开始返回数据。例如,OFFSET 20 表示查询应该从结果集的第 21 行开始返回数据。结合 LIMIT 子句使用时,OFFSET 指定了查询结果的起始行数。" } ] } ], "otherRequest": [ { "field": "main_sql", "label": "主SQL语句", "type": "string", "describe": "\n主SQL查询语句中使用 :limit 这种动态语法字段的赋值,以确保字段与请求参数一一对应,我们可以采用参数绑定的方式。下面是具体的优化步骤:\n1.将主SQL查询语句中的动态字段 :limit 替换为占位符(例如 ?),表示参数的位置。\n2.在执行查询之前,使用参数绑定的方法,将请求参数的值与占位符进行对应绑定。\n通过这种优化方式,我们能够提高查询语句的可读性和维护性,并确保动态语法字段与请求参数的正确对应关系。这样可以更好地保证查询的准确性和安全性。", "value":"select a.fmtono as 计划跟踪号,\nb.FEntity_FEntryID as 生产用料清单明细内码,\nb.fmaterialid2 as 物料编号,\nb.FMustQty as 需求数量,\nb.FPickedQty as 已发数量,\nc.stock_numb as 四化库存\nfrom mbs_assemble_detail a\nleft join mbs_assemble_material_detail b on b.fmoentryid=a.fentryid\nleft join wms_warehouse_store_info c on c.part_no=b.fmaterialid2 and c.mode_no=a.fmtono\nwhere a.fstatus not in ('5','6','7') and a.fpickmtrlStatus<>'3' and left(b.fmaterialid2,4)='0501' and c.matterial_type='4'\nand (b.FMustQty-b.FPickedQty)=0\n limit :limit offset :offset" } ], 'autoFillResponse': true } ``` #### 调用MySQL接口 通过上述元数据配置,我们可以实现对MySQL数据库中相关表格的数据提取和加工。在这里,我们主要关注以下几个关键点: 1. **API类型**:`select`,表示我们要执行的是一个查询操作。 2. **请求方法**:`POST`,我们使用POST方法来发送请求。 3. **主参数**:包括`limit`和`offset`,用于控制返回的数据量和起始位置。 4. **主SQL语句**:这是实际执行的数据提取逻辑,其中包含动态字段`:limit`和`:offset`。 #### 实际操作步骤 1. **定义主SQL语句**: 我们需要编写一个主SQL语句,用于从多个表中提取所需的数据。在这个例子中,我们从三个表 `mbs_assemble_detail`, `mbs_assemble_material_detail`, 和 `wms_warehouse_store_info` 中提取生产用料清单明细、物料编号、需求数量、已发数量以及四化库存等信息。 ```sql select a.fmtono as 计划跟踪号, b.FEntity_FEntryID as 生产用料清单明细内码, b.fmaterialid2 as 物料编号, b.FMustQty as 需求数量, b.FPickedQty as 已发数量, c.stock_numb as 四化库存 from mbs_assemble_detail a left join mbs_assemble_material_detail b on b.fmoentryid=a.fentryid left join wms_warehouse_store_info c on c.part_no=b.fmaterialid2 and c.mode_no=a.fmtono where a.fstatus not in ('5','6','7') and a.fpickmtrlStatus<>'3' and left(b.fmaterialid2,4)='0501' and c.matterial_type='4' and (b.FMustQty-b.FPickedQty)=0 limit :limit offset :offset ``` 2. **设置请求参数**: 在发送请求时,我们需要设置相应的请求参数,如下所示: ```json { 'main_params': { 'limit': 1000, 'offset': 0 } } ``` 3. **执行查询**: 使用轻易云平台提供的方法,将上述配置和参数发送到MySQL数据库进行查询,并获取结果。 #### 数据处理与响应 在获取到原始数据后,可以根据业务需求进行进一步的数据处理,例如过滤、排序或聚合等操作。轻易云平台支持自动填充响应,这意味着我们可以直接将处理后的数据返回给调用方,而无需额外编写代码来构建响应结构。 通过以上步骤,我们成功地实现了从MySQL数据库中提取并加工生产用料清单明细的数据。这不仅简化了复杂的数据集成过程,还提高了系统间的数据交互效率。 总结来说,通过正确配置元数据并合理利用轻易云平台提供的功能,我们能够高效地完成跨系统的数据集成任务,为业务决策提供可靠的数据支持。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image) ### 将源平台数据转换并写入目标平台MySQLAPI接口 在轻易云数据集成平台中,数据处理生命周期的第二步是将已经集成的源平台数据进行ETL转换,并最终写入目标平台。在本技术案例中,我们将重点探讨如何将生产用料清单四化库存的数据通过ETL过程转换为MySQLAPI接口所能接收的格式,并写入目标平台。 #### 数据请求与清洗 首先,我们需要从源平台提取生产用料清单明细内码和四化库存的数据。这些数据在提取后,需要经过一定的清洗和标准化处理,以确保数据的一致性和准确性。 #### 数据转换与写入 在数据清洗完成后,下一步是将这些数据转换为目标平台MySQLAPI接口所能接收的格式。以下是元数据配置的详细说明: ```json { "api": "execute", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "main_params", "label": "main_params", "type": "object", "describe": "111", "value": "1", "children": [ { "field": "FEntity_FEntryID", "label": "FEntity_FEntryID", "type": "string", "value": "{{生产用料清单明细内码}}" }, { "field": "stock_numb", "label": "stock_numb", "type": "string", "value": "{{四化库存}}" } ] } ], "otherRequest": [ { "field": "main_sql", "label": "main_sql", "type": "string", "describe": "111", "value": "update mbs_assemble_material_detail set stock_numb=:stock_numb where FEntity_FEntryID=:FEntity_FEntryID" } ] } ``` #### 配置解析 1. **API调用配置**: - `api`: 表示调用的是`execute`接口。 - `effect`: 设置为`EXECUTE`,表示执行操作。 - `method`: 使用`POST`方法提交请求。 - `idCheck`: 设置为`true`,表示需要进行ID检查。 2. **请求参数配置**: - `request`: 定义了主要参数,其中包含一个对象类型的字段`main_params`。 - `main_params`: 包含两个子字段: - `FEntity_FEntryID`: 对应生产用料清单明细内码。 - `stock_numb`: 对应四化库存。 3. **其他请求配置**: - `otherRequest`: 定义了一个SQL语句,用于更新数据库中的记录。 - `main_sql`: SQL更新语句,将四化库存值更新到对应的生产用料清单明细内码记录中。 #### 实际操作步骤 1. **提取数据**:从源系统中提取生产用料清单明细内码和四化库存的数据。 2. **构建请求体**:根据元数据配置构建请求体,将提取到的数据填充到相应的字段中。例如: ```json { main_params: { FEntity_FEntryID: '12345', stock_numb: '67890' }, main_sql: 'update mbs_assemble_material_detail set stock_numb=:stock_numb where FEntity_FEntryID=:FEntity_FEntryID' } ``` 3. **发送请求**:使用POST方法将构建好的请求体发送到MySQLAPI接口进行数据写入操作。 4. **验证结果**:检查数据库中的记录是否已正确更新,以确保ETL过程成功完成。 通过上述步骤,我们可以高效地将源平台的数据转换并写入目标平台,充分利用轻易云数据集成平台提供的全生命周期管理功能,实现不同系统间的数据无缝对接。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T18.png~tplv-syqr462i7n-qeasy.image)