ETL在数据集成的关键作用和实施步骤详解

  • 轻易云集成顾问-贺强
### 金蝶云星空数据集成到旺店通WMS案例分享 在本篇技术文章中,我们将重点探讨如何通过轻易云数据集成平台实现金蝶云星空的数据无缝对接至旺店通WMS。具体案例方案为“其他入库单=>其他入库单【入库单】OK-1”,涵盖从数据抓取、转换、写入到错误处理等多个技术环节。 #### 一、确保金蝶云星空数据不漏单 首先,为了保证集成过程中不遗漏任何一条重要的业务数据,采用定时可靠的抓取机制至关重要。我们使用executeBillQuery API来定期获取金蝶云星空系统中的最新业务数据,并实时监控其状态和流动情况。在配置方面,可以灵活设定抓取频率,以确保所有订单都被及时、高效地捕获。 #### 二、大量数据快速写入到旺店通WMS 在大量订单需要快速写入到目标系统的时候,效率与速度就是成功的关键。通过调用WDT_WMS_ENTRYORDER_CREATE API接口,可以批量将从金蝶云星空获取的数据高效导入至旺店通WMS。在此过程中,分段传输和多线程并行处理是提升性能的重要手段,有助于迅速完成海量数据同步。 #### 三、分页与限流策略处理 为了应对API请求可能遇到的分页和限流问题,在executeBillQuery接口调用过程中,需要设计合理的分页机制及重试策略。例如,当面对大规模查询结果时,可根据返回结果中的pageToken信息进行有序分页,同时设置合理的限流参数以避免触发反爬虫机制,从而保障整个流程顺畅运行。 这些核心要点构建起我们此次集成案例的数据走廊,接下来会进一步介绍如何解决其它如格式差异化对接、异常处理以及日志记录等实际技术难题,全方位展示此项目的完整实施方案。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/D31.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台中,调用源系统接口获取数据是数据处理生命周期的第一步。本文将详细探讨如何通过调用金蝶云星空的`executeBillQuery`接口来获取并加工数据。 #### 接口配置与请求参数 首先,我们需要配置元数据以便正确调用`executeBillQuery`接口。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FEntity_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "condition_bk": [ [ { "field": "field1", "logic": "eqv2", "value": null } ] ], "request": [ {"field":"FEntity_FEntryID","label":"FEntryID","type":"string","value":"FEntity_FEntryID"}, {"field":"FID","label":"实体主键","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FStockOrgId_FNumber","label":"库存组织","type":"string","value":"FStockOrgId.FNumber"}, {"field":"FDate","label":"日期","type":"string","value":"FDate"}, {"field":"FBillTypeID","label":"单据类型","type":"string","value":"FBillTypeID"}, {"field":"FSUPPLIERID_FNumber","label":"供应商","type":"string","value":"FSUPPLIERID.FNumber"}, {"field":"FNOTE","label":"备注","type":"string","value":"FNOTE"}, {"field":"FMATERIALID_FNumber","label":"物料编码","type":"string","value":"FMATERIALID.FNumber"}, {"field":"FSTOCKID_FNumber", "label": "收货仓库", "type": "string", "value": "FSTOCKID.FNumber"}, {"field": "FQty", "label": "实收数量", "type": "string", "value": "FQty"}, {"field": "FPrice", "label": "成本价", "type": "string", "value": "FPrice"}, {"field": "FAmount", "label": "总成本", "type": "string", "value": "FAmount"} ], ... } ``` #### 请求参数详解 - **api**: `executeBillQuery`,表示调用金蝶云星空的查询接口。 - **method**: `POST`,使用POST方法进行请求。 - **number**: `FBillNo`,指定单据编号字段。 - **id**: `FEntity_FEntryID`,指定实体条目主键字段。 - **pagination**: 分页配置,每页大小为500条记录。 - **idCheck**: 启用主键检查,确保唯一性。 请求参数中的字段映射至金蝶云星空的数据结构,如下所示: - `{"field": "...", ...}`:每个字段映射到金蝶系统中的具体字段,例如`"FBillNo"`映射到单据编号。 #### 调用示例 以下是一个实际调用的示例: ```json { ... { "_moduleName_1_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_1_1__1__1__1__1__1__1__1__1__1__1__1__2__2___2___2___2___2___2___2___2___2___3___3___3___3___3___3___3____4____4____4____4____4____4____4____5____5____5____5____5____5____6_____6_____6_____6_____6_____6_____7______7______7______7______7______8_______8_______8_______8_______9________9________9________9________10________10________10________10________11________11________11________11________12________12________12________12________13________13________13________13_______14_______14_______14_______14_______15_______15_______15_______15_______16_______16_______16_______16_______17_______17_______17_______17______18______18______18______18______19______19______19______19_____20_____20_____20_____20_____21_____21_____21_____21_____22_____22_____22_____22_____23_____23_____23_____23" } ``` 在这个请求中,我们根据元数据配置发送了一个POST请求至金蝶云星空的`executeBillQuery`接口,并传递了必要的查询条件和分页参数。 #### 数据处理与清洗 获取到原始数据后,需要进行清洗和转换,以便后续的数据写入操作。以下是一些常见的数据清洗步骤: 1. **去除冗余字段**:只保留需要的字段,去除多余信息。 2. **格式转换**:将日期、数值等字段转换为统一格式。 3. **数据校验**:检查关键字段是否为空或格式错误,并进行修正。 例如,对于日期字段,可以使用以下代码进行格式转换: ```python import datetime def convert_date(date_str): return datetime.datetime.strptime(date_str, '%Y-%m-%d').strftime('%Y%m%d') # 示例转换 date_str = '2023-10-01' formatted_date = convert_date(date_str) print(formatted_date) # 输出:20231001 ``` #### 总结 通过上述步骤,我们成功地调用了金蝶云星空的`executeBillQuery`接口,并对获取的数据进行了初步清洗和加工。这为后续的数据转换与写入奠定了基础。在轻易云数据集成平台中,这些操作可以通过可视化界面和自动化流程高效完成,从而极大提升业务透明度和效率。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期第二步:ETL转换与写入旺店通WMSAPI接口 在数据集成过程中,ETL(Extract, Transform, Load)是至关重要的一环。本文将深入探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为目标平台旺店通WMSAPI接口所能够接收的格式,并最终写入目标平台。 #### API接口配置与元数据解析 在本案例中,我们需要将源平台的数据通过ETL过程转换为旺店通WMS系统能够识别的格式,并通过其API接口进行数据写入。以下是我们使用的元数据配置: ```json { "api": "WDT_WMS_ENTRYORDER_CREATE", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,FDate,FSTOCKID", "bodyName": "details", "bodySum": ["FQty"], "header": ["FBillNo", "FDate", "FSTOCKID"], "body": ["FMATERIALID_FNumber", "FQty", "FEntity_FEntryID", "FLOT", "FPRODUCEDATE", "FEXPIRYDATE"] }, "request": [ { "label": "入库单信息", "field": "entryOrder", "type": "object", "children": [ {"parent": "entryOrder", "label": "入库单号", "field": "entryOrderCode", "type": "string", "value":"{FBillNo}"}, {"parent": "entryOrder", "label":"仓库编码","field":"warehouseCode","type":"string","value":"{FSTOCKID}"}, {"parent":"entryOrder","label":"业务类型","field":"orderType","type":"string","value":"QTRK"} ] }, { "label":"单据信息","field":"orderLines","type":"array","value":"details", "children":[ { "field":"orderLine","label":"orderLine","type":"object","parent":"orderLines", "children":[ {"parent":"orderLines","label":"商家编码","field":"itemCode","type":"string","value": "{FMATERIALID_FNumber}"}, {"parent":"orderLines","label":"应收商品数量","field":"planQty","type": "string","value": "{FQty}"}, {"parent": "orderLines" ,"label" :"入库单的行号" ,"field" :"orderLineNo" ,"type" :"string" ,"value": "{FEntity_FEntryID}" }, {"parent": "orderLines" ,"label" :"库存类型" ,"field" :"inventoryType" ,"type" :"string" ,"value": "ZP"}, {"parent": "orderLines" ,"label" :"批次" ,"field" :"batchCode" ,"type": :"string ,"value": "{FLOT}" }, {"parent": :"orderLines ,"label :"生产日期 ,"field: :"productDate ,"type: :"string, ,"value: "{{FPRODUCEDATE|date}}"}, {"parent: orderLines, label: 过期日期, field: expireDate, type: string, value: {{FEXPIRYDATE|date}} } ] } ] } ] } ``` #### 数据转换与映射 在这个配置中,我们需要关注以下几个关键点: 1. **API与方法**:我们使用的是`WDT_WMS_ENTRYORDER_CREATE` API,方法为`POST`。 2. **操作方式**:采用`merge`方法,将字段`FBillNo`, `FDate`, `FSTOCKID`合并处理。 3. **请求结构**: - **入库单信息**:包含了入库单号、仓库编码和业务类型。 - **单据信息**:包含了订单行的信息,如商家编码、应收商品数量、行号、库存类型、批次、生产日期和过期日期。 #### 数据请求与清洗 首先,我们从源系统提取原始数据,并进行必要的清洗和预处理。这一步确保了数据的准确性和一致性,为后续的转换打下基础。 #### 数据转换 接下来,我们根据元数据配置,将清洗后的数据进行转换: - **头部信息**:包括`FBillNo`, `FDate`, `FSTOCKID`等字段,这些字段将被映射到目标系统中的相应字段,如`entryOrderCode`, `warehouseCode`等。 - **体部信息**:包括物料编号(FMATERIALID_FNumber)、数量(FQty)、行号(FEntity_FEntryID)、批次(FLOT)、生产日期(FPRODUCEDATE)和过期日期(FEXPIRYDATE)。这些字段将被映射到目标系统中的相应字段,如`itemCode`, `planQty`, `orderLineNo`, `batchCode`, `productDate`, `expireDate`等。 #### 数据写入 最后,我们将转换后的数据通过API接口写入到旺店通WMS系统。具体步骤如下: 1. **构建请求体**:根据元数据配置构建JSON请求体,包括头部信息和体部信息。 2. **发送请求**:使用HTTP POST方法,将请求体发送到指定的API端点。 3. **处理响应**:接收并处理API响应,确保数据成功写入目标系统。如果出现错误,记录日志并进行必要的错误处理。 通过以上步骤,我们实现了从源平台到目标平台的数据无缝对接,确保了数据的一致性和准确性。这一过程不仅提高了业务效率,还增强了系统间的数据透明度和可追溯性。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/T17.png~tplv-syqr462i7n-qeasy.image)