提升数据传输效率:批量写入和格式转换优化策略

  • 轻易云集成顾问-姚缘
### 金蝶-供应商-->聚水潭-供应商 数据集成案例 在本文中,我们将讨论如何成功实现金蝶云星空与聚水潭的平台数据集成,着重介绍具体技术细节和API接口使用方法。在实际项目运行中,通过调用金蝶云星空的executeBillQuery接口来获取供应商数据,随后利用聚水潭提供的/open/supplier/upload API批量写入到目标数据库,从而确保两者之间的数据同步和高效流转。 #### 确保数据不漏单的解决方案 为了保证在集成过程中没有订单遗漏,我们采用了定时可靠抓取机制,对金蝶云星空的数据进行周期性检查和更新。同时,为处理分页与限流问题,我们设计了分页处理逻辑,使得系统能够稳定地从大规模数据集中准确提取所需信息。每次请求后,我们会记录最大ID或时间戳,以便下一次请求可以无缝承接上一次结果。 #### 大量数据的快速写入策略 在处理大量供应商数据信息时,直接关系到性能优化的问题。为此我们进行了深度优化,通过对批量提交进行合理分割,加快了写入效率。此外,在上传至聚水潭之前,实现了一系列的数据格式转换和映射机制,以匹配目标系统要求。这极大地减少了因格式差异带来的阻碍,提高了整体工作效率。 #### 实时监控与日志记录 为了实时掌握整个流程中的异常情况,更好地响应意外事件,我们引入了全方位的实时监控功能以及详细日志记录机制。任何发生错误或异常状态都会立即触发告警,并自动进入错误重试流程,这既提高了系统可靠性,又保障了业务连续性。 以上是本篇文章开头部分内容,下面我们将进一步深入分析各个步骤的具体实施方法、代码实例以及遇到的问题及解决方式。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/D4.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,通过调用金蝶云星空的`executeBillQuery`接口来获取供应商数据,并进行相应的数据加工。 #### 接口配置与调用 首先,我们需要配置并调用金蝶云星空的`executeBillQuery`接口。根据提供的元数据配置,以下是具体的请求参数和字段说明: - **API**: `executeBillQuery` - **方法**: `POST` - **业务对象表单Id**: `BD_Supplier` 请求参数包含以下字段: ```json { "FSupplierId": "FSupplierId", "FNumber": "FNumber", "FName": "FName", "FCreateOrgId_FNumber": "FCreateOrgId.FNumber", "FUseOrgId_FNumber": "FUseOrgId.FNumber", "FAddress": "FAddress", "FContact": "FContact", "FTel": "FTel", "FMobile": "FMobile" } ``` 其他请求参数包括分页和过滤条件: ```json { "Limit": "{PAGINATION_PAGE_SIZE}", "StartRow": "{PAGINATION_START_ROW}", "TopRowCount": null, "FilterString": "FAuditDate>='{{LAST_SYNC_TIME|dateTime}}' and FUseOrgId.FNumber in ('YR','DM') and FDocumentStatus='C'", "FieldKeys": ["FSupplierId", "FNumber", "FName", ...], "FormId": "BD_Supplier" } ``` #### 数据请求与清洗 在实际操作中,首先需要构建HTTP POST请求,将上述参数发送到金蝶云星空的API端点。以下是一个示例代码片段,用于发起请求并处理响应: ```python import requests import json url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'BD_Supplier', 'FieldKeys': 'FSupplierId,FNumber,FName,FCreateOrgId.FNumber,FUseOrgId.FNumber,FAddress,FContact,FTel,FMobile', 'FilterString': 'FAuditDate>="2023-01-01" and FUseOrgId.FNumber in ("YR","DM") and FDocumentStatus="C"', 'Limit': 100, 'StartRow': 0 } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() ``` 在这个过程中,我们需要特别注意以下几点: 1. **分页处理**:由于可能存在大量数据,需要通过分页参数(`Limit`和`StartRow`)分批次获取。 2. **过滤条件**:通过`FilterString`设置过滤条件,以确保只获取符合条件的数据。 3. **字段选择**:使用`FieldKeys`指定需要查询的字段,避免不必要的数据传输。 #### 数据转换与写入 获取到原始数据后,需要对其进行清洗和转换,以便写入目标系统。在此过程中,可以利用轻易云平台提供的可视化工具,对数据进行映射和转换。例如,将金蝶云星空中的字段映射到聚水潭系统中的对应字段: ```json [ {"sourceField":"FSupplierId", "targetField":"supplier_id"}, {"sourceField":"FNumber", "targetField":"supplier_code"}, {"sourceField":"FName", "targetField":"supplier_name"}, {"sourceField":"FAddress", "targetField":"address"}, {"sourceField":"FContact", "targetField":"contact_name"}, {"sourceField":"FTel", "targetField":"contact_phone"}, {"sourceField":"FMobile", "targetField":"contact_mobile"} ] ``` 在轻易云平台上,可以通过拖拽操作完成这些映射,并设置必要的数据转换规则,例如格式转换、字符串处理等。 #### 实时监控与日志记录 为了确保数据集成过程的透明性和可靠性,轻易云平台提供了实时监控和日志记录功能。可以实时查看每个步骤的数据流动情况,并在出现错误时快速定位问题。例如,通过日志记录可以追踪每次API调用的请求和响应,方便调试和优化。 总结来说,通过合理配置和调用金蝶云星空的`executeBillQuery`接口,可以高效地获取并加工供应商数据,为后续的数据转换与写入奠定基础。在实际操作中,需要注意分页处理、过滤条件设置以及字段映射等关键环节,以确保数据集成过程顺利进行。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S26.png~tplv-syqr462i7n-qeasy.image) ### 将金蝶供应商数据转换并写入聚水潭API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)过程是关键的一环。本文将详细探讨如何利用轻易云数据集成平台,将金蝶系统中的供应商数据进行ETL转换,并最终通过聚水潭API接口写入目标平台。 #### 1. 数据提取与清洗 首先,从金蝶系统中提取供应商数据。假设我们已经完成了数据请求与清洗阶段,得到了如下格式的源数据: ```json { "FName": "供应商A", "FNumber": "S123456", "FAddress": "北京市朝阳区", "FMobile": "13800000000", "FTel": "010-88888888", "FContact": "张三" } ``` #### 2. 数据转换 接下来,我们需要将上述源数据转换为聚水潭API接口所能接收的格式。根据元数据配置,目标平台的API接口信息如下: ```json { "api": "/open/supplier/upload", "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}"}, {"field":"address","label":"地址","type":"string","value":"{FAddress}"}, {"field":"mobile","label":"手机","type":"string","value":"{FMobile}"}, {"field":"phone","label":"电话","type":"string","value":"{FTel}"}, {"field":"contacts","label":"联系人","type":"string","value":"{FContact}"} ] } ``` 根据上述配置,我们可以将源数据映射到目标API请求中。具体转换逻辑如下: - `enabled` 字段固定为 `"true"`,表示该供应商信息有效。 - `name` 字段对应源数据中的 `FName`。 - `supplier_code` 字段对应源数据中的 `FNumber`。 - `address` 字段对应源数据中的 `FAddress`。 - `mobile` 字段对应源数据中的 `FMobile`。 - `phone` 字段对应源数据中的 `FTel`。 - `contacts` 字段对应源数据中的 `FContact`。 转换后的目标平台请求体应如下所示: ```json { "enabled": "true", "name": "供应商A", "supplier_code": "S123456", "address": "北京市朝阳区", "mobile": "13800000000", "phone": "010-88888888", "contacts": "张三" } ``` #### 3. 数据写入 最后一步是将转换后的数据通过HTTP POST请求写入聚水潭系统。以下是一个示例代码片段,用于展示如何实现这一过程: ```python import requests import json url = 'https://api.jushuitan.com/open/supplier/upload' headers = {'Content-Type': 'application/json'} data = { 'enabled': 'true', 'name': '供应商A', 'supplier_code': 'S123456', 'address': '北京市朝阳区', 'mobile': '13800000000', 'phone': '010-88888888', 'contacts': '张三' } response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print('Data successfully written to Jushuitan') else: print(f'Failed to write data: {response.text}') ``` 在上述代码中,我们使用Python的requests库发送POST请求,将转换后的JSON数据写入聚水潭系统。如果请求成功,返回状态码为200,则表示数据已成功写入。 #### 总结 通过上述步骤,我们实现了从金蝶系统提取供应商数据,并经过ETL转换后,通过聚水潭API接口成功写入目标平台。这一过程展示了轻易云数据集成平台在处理异构系统间的数据集成时的强大能力和灵活性。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)