ETL流程:轻易云平台实现MySQL数据转为金蝶云格式并写入

  • 轻易云集成顾问-黄宏棵
### CRM-KHWL-客户物料对应表同步金蝶-新增:MySQL数据集成案例 在本技术文章中,我们将解析如何通过轻易云平台实现MySQL数据库与金蝶云星空的系统对接,具体案例为CRM-KHWL-客户物料对应表同步到金蝶的新增任务。本文聚焦于关键技术点和实际操作流程,通过API接口实现高效、可靠的数据集成。 首先,考虑到大量数据需要从MySQL快速写入金蝶云星空,我们采用了支持高吞吐量的数据写入能力的配置方案。这不仅提升了处理时效性,还确保数据不会遗漏。在此过程中,我们使用定时可靠抓取MySQL接口数据(select)的方式,保证获取到最新准确的数据。 同时,对于批量数据集成到金蝶云星空的需求,我们调用了金蝶提供的batchSave API,通过自定义数据转换逻辑来适应特定业务需求和结构差异。此外,为确保每一步操作都清晰可见且问题及时发现与解决,我们利用集中监控和告警系统实时跟踪数据流动状态及性能,并加入了错误重试机制以应对异常情况。 基于灵活可视化的数据流设计工具,我将描述具体步骤,包括如何处理分页和限流问题,有效管理API资产,以及创建一个稳健、高效、透明化的数据集成流程。这些技术要点将帮助大家更好地掌握MySQL与金蝶云星空之间复杂但必要的数据互动。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/D30.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用MySQL接口select获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何使用轻易云数据集成平台调用MySQL接口`select`获取并加工数据,重点关注元数据配置和API接口的技术细节。 #### 元数据配置解析 元数据配置是实现数据请求与清洗的关键。以下是我们使用的元数据配置: ```json { "api": "select", "effect": "QUERY", "method": "POST", "number": "单据编号", "id": "sourceid", "request": [ { "field": "main_params", "label": "main_params", "type": "object", "describe": "111", "value": "1", "children": [ { "field": "limit", "label": "limit", "type": "string", "value": "1000" }, { "field": "offset", "label": "offset", "type": "string" } ] } ], "otherRequest": [ { "field": "main_sql", "label": "main_sql", "type": "string", "describe": "", ... } ], ... } ``` #### 数据请求与清洗 在这个配置中,我们定义了一个POST请求来调用MySQL数据库中的`select`语句。具体步骤如下: 1. **定义API接口**:通过`api`字段指定为`select`,表示我们要执行一个查询操作。 2. **设置请求方法**:通过`method`字段指定为`POST`,确保请求方法的一致性。 3. **参数配置**: - `main_params`对象包含两个子参数:`limit`和`offset`,用于分页查询。其中,`limit`默认值为1000。 - `otherRequest`中的SQL查询语句定义了具体的数据提取逻辑。 #### SQL查询语句详解 SQL查询语句是整个数据获取过程的核心部分。以下是具体的SQL语句: ```sql SELECT CONCAT('', a.data_id) AS sourceid, CONCAT(c.org_code, '_', b.customer_code) AS '单据编号', c.org_code AS '销售组织', b.customer_code AS '客户编号', JSON_UNQUOTE(JSON_EXTRACT(a.customer_name, '$[0].value')) AS '客户名称', a.f_pinpai AS '品牌', a.product_id AS '产品ID', a.cust_material_number AS '客户物料编号', a.cust_material_name AS '客户物料名称', a.cust_specification_model AS '客户规格型号', a.material_number AS '物料编号', a.material_name AS '物料名称', a.specification_model AS '规格型号', a.product_line AS '产品线' FROM wk_wodtop_customer_material_ref a LEFT JOIN wk_wodtop_customer b ON a.customer_id = b.data_id LEFT JOIN wk_wodtop_sales_organization c ON c.data_id = (JSON_UNQUOTE(JSON_EXTRACT(a.sales_org, '$[0].key'))) WHERE a.cust_material_number <> '' AND a.material_number <> '' AND c.org_code <> '' AND sync_1 <> '1' LIMIT :limit OFFSET :offset; ``` 这段SQL语句从三个表中提取并关联了多个字段,通过JOIN操作实现了复杂的数据整合,并且通过条件过滤确保只提取有效的数据。 #### 请求参数与自动填充响应 在实际操作中,请求参数会自动填充到SQL语句中的`:limit`和`:offset`位置,实现动态分页查询。此外,通过设置`autoFillResponse: true`, 平台会自动处理响应结果,将其转换为目标格式。 #### 异常处理与补偿机制 为了确保数据集成过程的可靠性,我们还配置了异常处理与补偿机制。例如,通过设置定时任务(crontab)来定期检查和补偿遗漏的数据请求: ```json "omissionRemedy":{ ... ,"crontab":"1 1 * * *" } ``` 该配置表示每小时检查一次,确保任何遗漏的数据都能及时补偿。 通过以上步骤,我们实现了从MySQL数据库高效、可靠地获取并加工数据,为后续的数据转换与写入奠定了坚实基础。 ![打通钉钉数据接口](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术实现过程。 #### 1. 配置元数据 首先,我们需要配置元数据,以便将源数据映射到目标平台所需的格式。以下是元数据配置的详细说明: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FID", "label": "FID", "type": "string", "value": "_findCollection find FID from 9c6a0715-febe-3a94-a928-6fbc7aae0aa1 where FBillNo={{单据编号}}" }, { "field": "FBillNo", "label": "单据编号", "type": "string", "value": "{{单据编号}}" }, { "field": "FSaleOrgId", "label": "FSaleOrgId", "type": "string", "value": "{{销售组织}}", "parser": { "name": "ConvertObjectParser", "params": "FNumber" } }, { ... } ], ... } ``` #### 2. 数据提取与清洗 在这个阶段,我们从源系统中提取原始数据,并进行必要的清洗和预处理。例如,从CRM系统中提取客户物料对应表的数据,并确保这些数据符合业务需求。 #### 3. 数据转换 接下来,我们使用轻易云平台提供的工具将清洗后的数据转换为金蝶云星空API接口所需的格式。具体步骤如下: 1. **字段映射**:根据元数据配置,将源系统中的字段映射到目标系统中的相应字段。例如,将`单据编号`映射到`FBillNo`,将`客户编号`映射到`FCustomerId`等。 ```json { ... { "field": "FBillNo", "label": "单据编号", "type": "string", ... }, { ... } } ``` 2. **值转换**:使用指定的解析器(如`ConvertObjectParser`)对某些字段进行值转换。例如,将销售组织编码从源系统格式转换为目标系统格式。 ```json { ... { "field": "FSaleOrgId", ... "parser": { ... } }, ... } ``` 3. **数组处理**:对于包含子项的数据(如物料明细),我们需要逐项处理并嵌套在主记录中。例如,将物料编号、客户物料编号等信息嵌套在`FEntity`数组中。 ```json { ... { ... {"field":"FEntity","label":"FEntity","type":"array","children":[ {"field":"FEntryID","label":"FEntryID","type":"string",...}, {"field":"FCustMatNo","label":"FCustMatNo","type":"string",...}, {"field":"FMaterialId","label":"FMaterialId","type":"string",...}, {"field":"FCustMatName","label":"FCustMatName","type":"string",...}, {"field":"FEffective","label":"启用","type":"string",...}, {"field":"F_FCustMatUom","label":"客户规格","type":"string",...} ]} }, ... } ``` #### 4. 数据写入 最后,将转换后的数据通过金蝶云星空API接口写入目标系统。我们使用HTTP POST请求来实现这一操作,并根据元数据配置中的参数设置请求体。 ```json { ... { ..., {"field":"FormId","label":"业务对象表单Id",...,"value":"SAL_CustMatMapping"}, {"field":"Operation","label":"执行的操作",...,"value":"BatchSave"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核",...,"value":"false"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料",...,"value":"true"}, {"field":"IsDeleteEntry","label":"是否删除已存在的分录",...,"value":"false"} }, ... } ``` 通过上述步骤,我们成功地将源平台的数据经过ETL转换后,写入了金蝶云星空API接口。这一过程不仅保证了数据的一致性和完整性,还提高了业务流程的自动化程度和效率。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)