ETL转换:将MySQL数据写入金蝶云星空API接口

  • 轻易云集成顾问-曾平安
### MOM-WWLLD-委外领料单-新增:MySQL数据集成到金蝶云星空的技术实现 在本案例中,我们通过轻易云数据集成平台,成功实现了将MySQL数据库中的委外领料单(MOM-WWLLD)新增的数据高效、可靠地集成到金蝶云星空系统中。该方案涉及对多项关键技术的运用,包括API接口调用、数据转换逻辑定制,以及实时监控和告警系统等。 首先,我们需要从MySQL数据库中提取新增的委外领料单数据,这部分工作是通过使用select语句进行操作。在实际应用中,由于数据量较大,且要求处理时效性高,因此我们采用了支持高吞吐量的数据写入能力以及分页策略来确保各个记录都能被顺利获取,而不会造成遗漏或延迟。 接着,为了适应金蝶云星空的特定业务需求和数据结构,对提取到的数据进行了自定义转换。这一过程中,重点解决了两者之间的数据格式差异问题,以保证导入过程中的一致性和准确性。最终,通过调用金蝶云星空提供的batchSave API接口,将批量整理后的委外领料单信息写入目标系统。 为了保障整个集成流程的稳定运行,还采取了一系列措施,包括: 1. 实时监控与日志记录功能,可以动态追踪每一个步骤中的状态及潜在问题。 2. 异常处理与错误重试机制,在发生异常情况时自动进行容错处理,从而提高整体流程的鲁棒性。 3. 数据质量监控模块,用以检测并及时修正可能出现的数据异常。 这些措施不仅提升了工作效率,还有效避免了由于数据错误导致的问题,使得整个跨系统的数据对接更加平稳流畅。在后续内容中,我们将详细探讨这一方案具体实施过程中的更多细节和实践经验。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/D17.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台从MySQL接口获取并加工数据的技术案例 在数据集成过程中,调用源系统的API接口是关键的一步。本文将详细探讨如何通过轻易云数据集成平台调用MySQL接口`select`获取并加工数据。我们将基于提供的元数据配置,深入解析每个步骤和技术细节。 #### 元数据配置解析 元数据配置是实现数据请求与清洗的核心。以下是我们需要关注的主要部分: - **API**: `select` - **Effect**: `QUERY` - **Method**: `POST` - **ID**: `sourceid` 请求参数包括: - **main_params**: 主参数对象,包含分页查询所需的`limit`和`offset`。 - **main_sql**: 主SQL语句,使用动态字段进行参数绑定。 #### 请求参数配置 首先,我们需要配置请求参数,以便在调用MySQL接口时能够正确传递分页信息。 ```json { "main_params": { "limit": "{PAGINATION_PAGE_SIZE}", "offset": "{PAGINATION_START_ROW}" } } ``` - **limit**: 限制结果集返回的行数,使用占位符`{PAGINATION_PAGE_SIZE}`。 - **offset**: 偏移量,使用占位符`{PAGINATION_START_ROW}`。 这些参数确保了查询结果能够分页返回,提高了查询效率和响应速度。 #### 主SQL语句优化 主SQL语句中使用了动态字段`:limit`和`:offset`,需要在执行查询前进行参数绑定。以下是优化后的主SQL语句: ```sql select t1.iface_id as sourceid, CONCAT_WS('_', t1.instruction_doc_num, t1.instruction_doc_line_num, t1.iface_id) as '单据编号', COALESCE(t2.aft_quiet_time, t1.account_date) as '单据日期', case t4.site_id when 8001 then 'T02' else '' end as '组织', t7.attr_value as '委外用料清单主键', t1.kingdee_po_line_id as '委外用料清单明细主键', t10.supplier_code as '供应商', t8.material_code as '物料编码', t9.uom_code as '单位', t1.attribute1 as '申请数量', t1.quantity as '实发数量', t1.kingdee_locator_id as '仓库', t1.attribute2 as '批号', t1.kingdee_po_number as '采购订单号', t4.line_num as '采购订单行号' from ty_mes.wms_po_result_iface t1 left join (select * from ty_mes.mt_account_period where account_period_id = (select max(account_period_id) from ty_mes.mt_account_period)) t2 on t1.tenant_id = t2.tenant_id and t1.account_date < t2.aft_quiet_time left join ty_mes.mt_po_header t3 on t1.tenant_id = t3.tenant_id and t1.kingdee_po_number = t3.po_number left join ty_mes.mt_po_line t4 on t1.tenant_id = t4.tenant_id and t3.po_header_id = t4.po_header_id left join ty_mes.mt_po_component t5 on t1.tenant_id = t5.tenant_id and t4.po_line_id = t5.po_line_id left join ty_mes.mt_po_component_attr t6 on t1.tenant_id = t6.tenant_id and t5.po_component_id = t6.po_component_id and t6.attr_name = 'KINGDEE_WWFENTRYID' left join ty_mes.mt_po_component_attr t7 on t1.tenant_id = t7.tenant_id and t6.po_component_id = t7.po_component_id and t7.attr_name = 'KINGDEE_WWFID' left join tarzan_method.mt_material t8 on t1.tenant_id = t8.tenant_id and t5.component_material_id = t8.material_id left join tarzan_common.mt_uom t9 on t1.tenant_id = n9.uom_tenant id and id.t5.component_uom_9uom_ left join tarzan_model.mt_supplier 10 on tenant.id.t10.supplier_tenant id and id.t3.supplier_10supplier_ where tenant.id.t17and instruction_doc_type='OUTSOURCE_DOC'and return_order=kingdee_po_line_6attr_valueand status in ('N', limit :limit offset :offset" ``` 通过这种方式,我们能够提高查询语句的可读性和维护性,并确保动态字段与请求参数的一一对应关系,从而保证查询的准确性和安全性。 #### 数据请求与清洗 在轻易云数据集成平台中,我们可以通过以下步骤实现数据请求与清洗: 1. **定义API接口**:选择API类型为`select`,方法为`POST`。 2. **配置请求参数**:设置分页查询所需的`limit`和`offset`。 3. **编写主SQL语句**:使用占位符进行动态字段替换,并确保与请求参数一一对应。 4. **执行查询并获取结果**:通过平台提供的可视化界面实时监控查询过程,并获取处理后的数据结果。 #### 实际应用案例 假设我们需要从MySQL数据库中获取委外领料单新增的数据,并对其进行加工处理。具体步骤如下: ```json { "api": "select", "effect": "QUERY", "method": "POST", "id": "sourceid", "request": [ { "field": "main_params", "label": "主参数", "type": "object", "describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。", "value": "1", "children": [ { "field": "limit", "label": "限制结果集返回的行数", "type": "int", "describe": "必要的参数!LIMIT 子句用于限制查询结果返回的行数。", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "offset", "label": "偏移量", "type": int, describe:"OFFSET 子句用于指定查询结果的起始位置或偏移量。", value:"{PAGINATION_START_ROW}" } ] } ], otherRequest:[ { field:"main_sql", label:"主SQL语句", type:"string", describe:"主SQL查询语句中使用 :limit 这种动态语法字段的赋值,以确保字段与请求参数一一对应。", value:"select\nt1.iface ... limit :limit offset :offset" } ], autoFillResponse:true } ``` 通过上述配置,我们可以高效地从MySQL数据库中获取所需的数据,并进行后续的数据转换与写入操作。这不仅提高了业务流程的透明度和效率,还确保了数据处理过程中的准确性和安全性。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/S3.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨这一过程中的关键技术细节和实现方法。 #### 数据请求与清洗 首先,我们需要从源系统中提取原始数据。这一步通常涉及到对不同数据源的连接和数据抽取。假设我们已经完成了这一步,接下来就进入数据转换与写入阶段。 #### 数据转换与写入 为了将数据正确地传输到金蝶云星空,我们需要根据其API接口要求对数据进行格式化和转换。以下是一个典型的元数据配置示例,用于将委外领料单新增的数据写入金蝶云星空: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "{{单据编号}}" }, { "field": "FDescription", "label": "备注", "type": "string", "describe": "备注" }, { "field": "FBillType", "label": "单据类型", "type": "string", "describe":"单据类型\n普通委外领料-WWLLD01_SYS\n倒冲委外领料-WWLLD02_SYS", ... }, ... ], ... } ``` #### 核心字段解析 1. **FBillNo(单据编号)**:这是一个字符串类型的字段,用于标识每个委外领料单的唯一编号。我们使用占位符`{{单据编号}}`来动态填充此值。 2. **FDescription(备注)**:同样是字符串类型,用于存储备注信息。 3. **FBillType(单据类型)**:这是一个关键字段,需要根据业务逻辑进行解析。通过`ConvertObjectParser`,我们可以将业务系统中的编码转换为金蝶云星空所需的编码格式。例如,普通委外领料对应`WWLLD01_SYS`。 4. **FEntity(明细信息)**:这是一个数组类型字段,包含多个子字段,如物料编码、单位、货主等。这些子字段也需要通过解析器进行转换,以确保符合目标系统的要求。 #### 子字段解析 在明细信息中,每个子字段都可能需要进行复杂的解析和映射。例如: - **FMaterialId(物料编码)**:使用`ConvertObjectParser`解析器,将源系统中的物料编码转换为金蝶云星空所需的格式。 - **FUnitID(单位)**:同样使用解析器,将单位信息进行转换。 - **FOwnerTypeId(货主类型)**和**FOwnerId(货主)**:这些字段用于标识货主及其类型,同样需要通过解析器进行处理。 #### 特殊处理 某些情况下,我们还需要对特定字段进行特殊处理。例如: - **FSubReqBillNO(委外订单号)**和**FSubReqEntrySeq(委外订单行号)**:这些字段可能需要从其他表中查找并填充,这可以通过轻易云的数据查找功能实现。 - **FEntity_Link**:这个数组包含了多个子字段,用于描述源单与目标单之间的关联关系。 #### 数据提交与验证 在完成所有字段的映射和转换后,我们使用POST方法将数据提交到金蝶云星空API接口: ```json { ... "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, ... } ``` 通过设置`IsAutoSubmitAndAudit`为`true`,我们可以自动提交并审核这些数据。此外,通过设置`IsVerifyBaseDataField`为`true`,可以确保基础数据字段得到验证,从而提高数据准确性。 ### 总结 通过以上步骤,我们实现了从源系统到金蝶云星空的数据ETL转换。在这个过程中,关键在于正确理解和应用元数据配置,通过合适的解析器和映射规则,将原始数据转化为目标系统所需的格式。轻易云平台提供了强大的工具和功能,使这一过程更加高效和可靠。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/T2.png~tplv-syqr462i7n-qeasy.image)