通过轻易云平台完成ETL转换及MySQL数据写入

  • 轻易云集成顾问-姚缘
### 聚水潭·奇门数据集成到MySQL技术案例分享 在本次技术案例中,我们将深入探讨如何通过轻易云数据集成平台,将聚水潭·奇门的销售订单数据高效集成到MySQL数据库中。该方案命名为“聚水潭-销售订单-->BI勤威-销售订单表_原始查询”。 在实际应用过程中,确保数据不漏单、处理分页和限流问题、实现可靠的数据抓取及写入,是关键环节。 首先,通过调用聚水潭·奇门的`jushuitan.order.list.query` API接口来获取最新的销售订单数据。为了应对API可能存在的分页限制,可以采用分段拉取的数据获取策略,每次请求一小部分数据,直至全部完成。这种方式不仅能保证所有的数据都被准确无误地提取,还能有效避免API因大批量请求而触发限流保护机制。 接下来,对于从聚水潭·奇门系统中获取的大量销售订单数据,需要借助自定义的数据转换逻辑,对其进行结构上的调整,使得这些数据能够适配目标MySQL数据库对应表格的字段格式。在此过程中,应特别注意处理两者之间可能存在的数据格式差异,以确保最终写入的数据符合业务需求。 为保障大量且快速地将以上整理后的销售订单信息存储到MySQL数据库,我们使用了高吞吐量的批量写入方法,即通过调用 `batchexecute` API 实现批量操作,有效提升了整体工作流程中的时效性。同时,为了减少潜在风险,还需要设计异常处理与错误重试机制,一旦发生故障,系统能够自动重新尝试执行未成功操作,从而提高稳定性和可靠性。 此外,该解决方案还融入了实时监控与日志记录功能,通过集中监控和告警系统,可以即时跟踪每个任务节点的运行状态与性能表现。一旦检测出任何异常状况,相关人员可以立刻收到通知并采取针对措施。这不但增强了任务管理透明度,也大幅降低了手动管理成本。 如上所述,此次对接方案展示了一系列应用轻易云平台特性的具体实施步骤,从API接口读取、运输、自定义转换,到最终安全、高速导入至目标MySQL,实现全面覆盖全过程生命周期管理。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D33.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭·奇门接口获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用聚水潭·奇门接口 `jushuitan.order.list.query` 获取销售订单数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要配置和调用聚水潭·奇门接口 `jushuitan.order.list.query`。该接口主要用于查询销售订单列表,支持分页查询,并且可以根据时间范围、单据状态等条件进行过滤。 ##### 请求参数配置 以下是请求参数的详细配置: - **page_index**: 页数,从第一页开始,默认值为1。 - **page_size**: 每页行数,默认25,最大25。在本例中设置为100。 - **start_time**: 修改开始时间,使用占位符 `{{LAST_SYNC_TIME|datetime}}` 动态获取上次同步时间。 - **end_time**: 修改结束时间,使用占位符 `{{CURRENT_TIME|datetime}}` 动态获取当前时间。 - **status**: 单据状态,可选值包括 WaitConfirm(待出库)、Confirmed(已出库)、Cancelled(作废)。 - **date_type**: 时间类型,默认值为0,对应修改时间。 ```json { "api": "jushuitan.order.list.query", "effect": "QUERY", "method": "POST", "number": "o_id", "id": "o_id", "name": "io_id", "request": [ {"field": "page_index", "label": "页数", "type": "string", "describe": "第几页,从第一页开始,默认1", "value": "1"}, {"field": "page_size", "label": "每页行数", "type": "string", "describe": "每页多少条,默认25,最大25", "value": "100"}, {"field": "start_time", "label": "修改开始时间", "type": "string", "describe": "修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空", "value":"{{LAST_SYNC_TIME|datetime}}"}, {"field": "end_time", "label":"修改结束时间","type":"string","describe":"修改结束时间,和起始时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空","value":"{{CURRENT_TIME|datetime}}"}, {"field":"status","label":"单据状态","type":"string","describe":"单据状态: WaitConfirm=待出库; Confirmed=已出库; Cancelled=作废"}, {"field":"date_type","label":"时间类型","type":"int","describe":"时间类型 默认0 0=修改时间 ; 1=制单日期; 2=出库时间"} ] } ``` #### 数据过滤与清洗 在获取到原始数据后,需要对数据进行过滤与清洗,以确保数据质量和一致性。根据元数据配置中的 `condition_bk` 字段,我们可以对特定条件的数据进行过滤: - **labels**: 不包含“线上发货”和“虚拟发货”标签的数据。 - **shop_site**: 等于“头条放心购”的店铺站点。 ```json "condition_bk":[ [{"field":"labels","logic":"notlike","value":"线上发货,虚拟发货"}, {"field":"shop_site","logic":"eqv2","value":"头条放心购"}] ] ``` 这些条件确保了我们只获取符合业务需求的数据,从而提高了数据的准确性和有效性。 #### 数据转换与写入 在完成数据请求和清洗后,需要将数据转换为目标系统所需的格式,并写入到BI勤威的销售订单表中。此步骤通常涉及字段映射、格式转换等操作。例如,将原始订单ID映射为目标系统中的订单ID字段。 ##### 数据转换示例 假设我们需要将原始订单ID(`o_id`)映射为目标系统中的订单ID字段(`order_id`),可以通过以下方式实现: ```json { "_source_field_1_": "_target_field_1_", "_source_field_2_": "_target_field_2_" } ``` 具体的字段映射规则根据实际业务需求进行配置,以确保数据能够正确写入目标系统。 #### 异常处理与补偿机制 在实际操作中,不可避免地会遇到各种异常情况,例如网络故障、接口超时等。为了保证数据的一致性和完整性,需要设计异常处理与补偿机制。 ##### 补偿机制示例 通过配置定时任务(crontab),可以定期检查并补偿未成功处理的数据。例如,每天凌晨2点执行一次补偿任务: ```json "omissionRemedy":{ "crontab":"2 2 * * *", ... } ``` 补偿任务会重新请求前一天的数据,以确保所有遗漏的数据都能被及时处理。 综上所述,通过合理配置和调用聚水潭·奇门接口,并结合轻易云平台提供的强大功能,可以高效地实现销售订单数据的集成与加工,为后续的数据分析和业务决策提供可靠的数据支持。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/S18.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入MySQL 在数据集成的生命周期中,ETL(Extract, Transform, Load)是关键的一步。本文将详细探讨如何使用轻易云数据集成平台,将源平台的数据转换为目标平台 MySQL API 接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 首先,我们需要从源系统获取原始数据,并进行初步的清洗和预处理。这一步通常涉及对原始数据进行筛选、去重、格式化等操作,以确保数据质量。 #### 数据转换与写入 接下来,我们进入本文的重点:将清洗后的数据进行转换,并通过 MySQL API 接口写入目标数据库。 ##### 元数据配置解析 以下是元数据配置的详细说明: ```json { "api": "batchexecute", "effect": "EXECUTE", "method": "SQL", "number": "id", "id": "id", "name": "id", "idCheck": true, "request": [ {"field":"id","label":"主键","type":"string","value":"{o_id}-{items_oi_id}"}, {"field":"order_date","label":"下单时间","type":"string","value":"{order_date}"}, {"field":"shop_status","label":"线上订单状态","type":"string","value":"{shop_status}"}, {"field":"question_type","label":"异常类型","type":"string","value":"{question_type}"}, {"field":"shop_id","label":"店铺编号","type":"string","value":"{shop_id}"}, {"field":"question_desc","label":"异常描述","type":"string","value":"{question_desc}"}, {"field":"so_id","label":"线上单号","type":"string","value":"{so_id}"}, {"field":"status","label":"ERP订单状态","type":"string","value":"{status}"} // 省略其他字段... ], "otherRequest": [ { "field": "main_sql", "label": "主语句", "type": "string", "describe": "SQL首次执行的语句,将会返回:lastInsertId", "value": "REPLACE INTO order_list_query(id,order_date,shop_status,question_type,shop_id,question_desc,so_id,status) VALUES" }, { "field": "limit", "label": "limit", "type": "string", "value": "1000" } ] } ``` ##### 数据转换步骤 1. **字段映射**: - `id`: 由 `{o_id}-{items_oi_id}` 组合而成,确保唯一性。 - `order_date`: 直接映射自 `{order_date}`。 - `shop_status`: 映射自 `{shop_status}`。 - `question_type`: 映射自 `{question_type}`。 - `shop_id`: 映射自 `{shop_id}`。 - `question_desc`: 映射自 `{question_desc}`。 - `so_id`: 映射自 `{so_id}`。 - `status`: 映射自 `{status}`。 2. **SQL语句构建**: 根据元数据配置中的`main_sql`字段,构建 SQL 插入语句: ```sql REPLACE INTO order_list_query(id, order_date, shop_status, question_type, shop_id, question_desc, so_id, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ``` 3. **批量执行**: 使用`batchexecute` API,通过批量执行 SQL 插入操作,将转换后的数据写入 MySQL 数据库。每次批量插入限制为 1000 条记录,以提高效率并避免超时。 ##### 实际案例 假设我们从源系统获取到以下订单数据: ```json [ { "o_id": 12345, "items_oi_id": 67890, ... // 其他字段 }, // 更多订单记录 ] ``` 根据上述元数据配置和字段映射规则,我们将其转换为适合 MySQL 插入的格式: ```sql REPLACE INTO order_list_query(id, order_date, shop_status, question_type, shop_id, question_desc, so_id, status) VALUES ('12345-67890', '2023-10-01', '已发货', '无', '001', '无异常', 'SO1234567890', '已完成') ``` 通过调用`batchexecute` API,批量插入这些转换后的记录到 MySQL 数据库中。 #### 总结 通过上述步骤,我们成功地将源平台的数据经过 ETL 转换后,写入到目标平台 MySQL 中。整个过程依赖于轻易云数据集成平台提供的强大功能,包括全异步处理、多系统支持以及灵活的元数据配置。这样不仅提高了数据处理效率,也确保了数据的一致性和完整性。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)