从提取到写入:金蝶与聚水潭平台的数据ETL技术实战

  • 轻易云集成顾问-谢楷斌
### 金蝶供应商=>聚水潭供应商:系统对接集成技术案例 在企业信息化管理中,确保各业务系统的数据有效对接是提升运营效率的重要环节。本篇文章将分享一个实际运行的技术方案案例——金蝶云星空数据如何无缝集成到聚水潭,这一过程集中体现了API调用、数据处理和传输优化等关键技术点。 为了实现两大平台之间的有效数据传递,我们采用了轻易云数据集成平台进行整体配置。我们的主要任务是通过金蝶云星空提供的API接口`executeBillQuery`抓取供应商信息,并利用聚水潭提供的数据写入接口`/open/supplier/upload`完成批量上传。这个过程中需要特别注意如下几个方面: 1. **确保集成金蝶云星空数据不漏单**:通过定时可靠地抓取金蝶云星空接口中的最新供应商信息,可以防止遗漏任何更新。这一步骤使用了轻易云的数据调度功能,实现全自动、定期执行。 2. **处理分页与限流问题**:由于涉及大量数据,必须考虑到金蝶云星空接口在返回结果时设置的分页限制及其速率控制机制。我们采用循环分页查询和错误重试策略来保证每次请求都能成功获取完整的数据。 3. **实时监控与日志记录**:整个过程使用轻易平台自带的实时监控和日志记录功能,不仅能随时了解数据流动情况,还可以方便追踪并解决异常情况。例如,当某个请求失败或响应超时时,会触发相应的重试机制,从而提高系统稳定性。 4. **不同格式间的数据转换**:由于两个系统对同一种类的信息定义规则有所不同,需要进行必要的数据映射和格式转换。在这个项目中,我们定制化地调整了从金蝶到聚水潭的一系列字段映射关系,以满足后者对于录入格式的要求。 5. **快速写入大量数据到聚水潭**:优化后的并行处理方式使得大批量数据能够迅速完成从输入至输出全过程,大幅减少等待时间,提高存储效率。 上述步骤不仅涵盖了基础操作流程,并且涉足了一些深层次的问题解决思路,将为您详细剖析有关API调用与异常处理等核心内容。在后续部分,我们将具体介绍如何配置这些实现细节,帮助您更深入理解每个环节的方法技巧。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/D3.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空接口`executeBillQuery`来获取供应商数据,并进行初步的数据加工。 #### 接口配置与调用 首先,我们需要了解如何配置和调用金蝶云星空的`executeBillQuery`接口。根据提供的元数据配置,我们可以看到该接口采用POST方法,主要用于查询(effect: "QUERY")。 ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FNumber", "id": "FSupplierId", "idCheck": true, ... } ``` 在请求参数部分,我们需要传递多个字段,如供应商ID(FSupplierId)、供应商编号(FNumber)、名称(FName)等。这些字段的详细信息如下: ```json [ {"field":"FSupplierId","label":"FSupplierId","type":"string","describe":"111","value":"FSupplierId"}, {"field":"FNumber","label":"FNumber","type":"string","describe":"111","value":"FNumber"}, {"field":"FName","label":"FName","type":"string","describe":"111","value":"FName"}, ... ] ``` 此外,还需要传递一些分页参数和过滤条件,例如: ```json [ {"field":"Limit","label":"Limit","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"StartRow","label":"StartRow","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_START_ROW}"}, {"field":"FilterString","label":"FilterString","type":"string","describe":"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=","value":"FAuditDate>='{{LAST_SYNC_TIME|dateTime}}'"} ] ``` 这些参数确保了我们能够高效地分页获取数据,并根据特定条件进行过滤。 #### 数据请求与清洗 在完成接口调用配置后,下一步是发送请求并获取数据。轻易云平台提供了全透明可视化的操作界面,使得这一过程变得直观且易于监控。 1. **发送请求**:通过POST方法向`executeBillQuery`接口发送请求,携带必要的字段和分页参数。 2. **接收响应**:处理返回的数据,通常是一个JSON格式的响应,其中包含了所需的供应商信息。 3. **数据清洗**:对接收到的数据进行初步清洗,包括去除无效字段、标准化字段格式等。例如,将日期格式统一为ISO标准,将数值字段转换为浮点型等。 #### 数据转换与写入 在完成数据清洗后,需要将其转换为目标系统所需的格式,并写入到相应的数据存储中。这一步通常包括以下几个步骤: 1. **字段映射**:将源系统中的字段映射到目标系统中的对应字段。例如,将`FSupplierId`映射到目标系统中的`SupplierID`。 2. **数据转换**:根据目标系统的要求,对数据进行必要的转换。例如,将字符串类型的金额字段转换为数值类型。 3. **写入操作**:通过API或数据库连接,将转换后的数据写入到目标系统中。 #### 实际案例 假设我们需要从金蝶云星空中获取所有状态为“已审核”的供应商信息,并将其同步到聚水潭系统中。我们可以设置如下过滤条件: ```json { "FilterString": "FBusinessStatus = '已审核'" } ``` 然后,通过轻易云平台发送请求并处理响应: ```json { "api": "executeBillQuery", ... "request": { "FormId": "BD_Supplier", ... "FilterString": "FBusinessStatus = '已审核'" } } ``` 接收到响应后,对数据进行清洗和转换,并最终写入聚水潭系统。 通过以上步骤,我们实现了从金蝶云星空到聚水潭系统的数据集成。这一过程不仅提高了业务透明度和效率,还确保了不同系统间的数据一致性和准确性。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/S16.png~tplv-syqr462i7n-qeasy.image) ### 将金蝶供应商数据转换并写入聚水潭API接口的技术案例 在数据集成生命周期的第二步中,关键任务是将从源平台(金蝶)获取的数据进行ETL(提取、转换、加载)处理,并将其转换为目标平台(聚水潭)所能接收的格式。本文将详细探讨如何利用轻易云数据集成平台完成这一过程,特别是通过配置元数据,将供应商信息写入聚水潭API接口。 #### API接口元数据配置解析 首先,我们需要理解目标平台聚水潭的API接口元数据配置: ```json { "api": "/open/supplier/upload", "effect": "EXECUTE", "method": "POST", "number": "supplier_code", "id": "supplier_code", "name": "supplier_code", "idCheck": true, "request": [ { "field": "enabled", "label": "是否生效", "type": "string", "describe": "是否生效", "value": "true" }, { "field": "name", "label": "供应商名称", "type": "string", "describe": "供应商名称", "value": "{FName}" }, { "field": "supplier_code", "label": "供应商编码", "type": "string", "describe": "供应商编码", "value": "{FNumber}" } ] } ``` 该配置文件定义了向聚水潭API `/open/supplier/upload` 上传供应商信息的具体要求。以下是对各个字段的详细解释: - `api`: API接口路径。 - `effect`: 操作效果,`EXECUTE`表示执行操作。 - `method`: HTTP请求方法,这里是`POST`。 - `number`, `id`, `name`: 均为供应商编码字段,用于唯一标识供应商。 - `idCheck`: 表示在写入前是否需要检查ID唯一性。 - `request`: 请求参数列表,包括三个字段: - `enabled`: 是否生效,固定值为`true`。 - `name`: 供应商名称,对应金蝶系统中的`FName`字段。 - `supplier_code`: 供应商编码,对应金蝶系统中的`FNumber`字段。 #### 数据提取与清洗 在进行数据转换之前,首先需要从金蝶系统中提取原始数据。假设我们已经通过轻易云平台完成了这一过程,获取到如下格式的数据: ```json [ { "FName": "供应商A", "FNumber": "S001" }, { "FName": "供应商B", "FNumber": "S002" } ] ``` 这些数据需要经过清洗和标准化处理,以确保符合目标平台的要求。例如,我们需要确保每个供应商都有唯一的编码,并且所有必要字段都已填充。 #### 数据转换与加载 接下来,我们利用元数据配置,将清洗后的金蝶数据转换为聚水潭API所需的格式。根据上述元数据配置,转换后的JSON请求体应如下所示: ```json [ { "_api_":"\/open\/supplier\/upload", "_method_":"POST", "_effect_":"EXECUTE", "_idCheck_":"true", "_data_":{ "_number_":"S001", "_id_":"S001", "_name_":"S001", "_request_":[ {"field":"enabled","value":"true"}, {"field":"name","value":"供应商A"}, {"field":"supplier_code","value":"S001"} ] } }, { "_api_":"\/open\/supplier\/upload", "_method_":"POST", "_effect_":"EXECUTE", "_idCheck_":"true", "_data_":{ "_number_":"S002", "_id_":"S002", "_name_":"S002", "_request_":[ {"field":"enabled","value":"true"}, {"field":"name","value":"供应商B"}, {"field":"supplier_code","value":"S002"} ] } } ] ``` 每个请求体包含以下信息: - `_api_`, `_method_`, `_effect_`, `_idCheck_`: 与元数据配置一致,用于指定API路径、HTTP方法、操作效果和ID检查。 - `_number_`, `_id_`, `_name_`: 均为供应商编码,用于唯一标识。 - `_request_`: 包含具体的数据字段及其值。 #### 写入目标平台 最后一步是将转换后的数据通过HTTP POST请求写入聚水潭系统。使用轻易云平台提供的可视化界面或编程接口,可以实现这一过程。例如,通过Python代码发起HTTP请求: ```python import requests url = 'https://api.jushuitan.com/open/supplier/upload' headers = {'Content-Type': 'application/json'} data = [ { '_api_': '/open/supplier/upload', '_method_': 'POST', '_effect_': 'EXECUTE', '_idCheck_': 'true', '_data_': { '_number_': 'S001', '_id_': 'S001', '_name_': 'S001', '_request_' : [ {'field':'enabled','value':'true'}, {'field':'name','value':'供应商A'}, {'field':'supplier_code','value':'S001'} ] } }, # ... more data ... ] response = requests.post(url, json=data, headers=headers) print(response.json()) ``` 该代码段展示了如何将已经转换好的JSON对象通过HTTP POST请求发送到聚水潭API,实现最终的数据写入。 通过上述步骤,我们成功地将从金蝶系统提取的原始数据经过ETL处理后,转化为符合聚水潭API要求的数据格式,并顺利写入目标平台。这一过程不仅提高了数据集成效率,还保证了不同系统间的数据一致性和准确性。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T21.png~tplv-syqr462i7n-qeasy.image)