从金蝶云到轻易云:夯实数据集成的最佳实践

  • 轻易云集成顾问-彭萍
### 案例分享:金蝶云星空数据集成到轻易云集成平台 在现代商业环境中,系统间的数据无缝对接已成为企业高效运营的关键。本文将详细介绍如何通过轻易云数据集成平台实现从金蝶云星空获取分销商与客户对应关系,并进行批量数据处理和写入。本案例以“查询BNS分销商与客户对应关系-关联查询”为核心,实际操作过程中重点解决了以下技术挑战: #### 1. 确保完整性:不漏单的数据抓取 为了确保从金蝶云星空接口executeBillQuery抓取的数据完全准确,不遗漏任何记录,我们针对API分页及限流问题进行了优化配置。通过执行定时可靠的抓取机制,实现每次请求返回的数据全覆盖。同时,使用分页参数设置合理的页大小,以平衡性能和单次请求数据量。 #### 2. 高效写入:大规模数据快速导入 当大量数据被成功提取后,我们需要有效率地将其批量写入到轻易云集成平台。利用轻易云提供的大并发写入策略,将提取得来的各条记录批量化处理,加快了整体导入速度,从而保证业务实时性的需求。 #### 3. 数据格式转换:跨平台兼容性处理 由于不同系统之间存在着不可避免的数据格式差异,为确保两个平台顺利对接,在映射过程中进行了详尽且精确的定制化规则设定。这包括字段类型转换、必要的前置逻辑检查,以及符合目标存储要求的格式修正步骤,使得导出的每一条信息都能正确投入下一环节。 本文章开头部分总结了我们在这个项目中的几个主要技术点,以及采取的方法论。在随后的章节中,我们将逐步深入讲解如何配置、测试以及监控整个流程,以达到稳定、高效且可维护的信息同步服务。 --- 希望这段开头能够帮助你进入具体方案实施阶段,有关更详细的实现过程请参考下文X-Y部分。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/D27.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将深入探讨如何使用轻易云数据集成平台,通过调用金蝶云星空的`executeBillQuery`接口来查询BNS分销商与客户对应关系,并对数据进行初步加工。 #### 接口配置与请求参数 首先,我们需要配置元数据以便正确调用金蝶云星空的API接口。以下是元数据配置的详细内容: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FBillNo", "id": "FEntity_FEntryID", "idCheck": true, "request": [ {"field":"FID","label":"实体主键","type":"string","describe":"FSupplierId","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"编码","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","describe":"名称","value":"FDocumentStatus"}, {"field":"FModifyDate","label":"最后修改日期","type":"string","describe":"创建组织","value":"FModifyDate"}, {"field":"FApproveDate","label":"审核日期","type":"string","describe":"使用组织","value":"FApproveDate"}, {"field":"FApproverId","label":"审核人","type":"string","describe":"描述","value":"FApproverId"}, {"field":"FCreateDate","label":"创建日期","type":"string","describe":"简称","value":"FCreateDate"}, {"field":"FCreatorId","label":"创建人","type":"string","describe":"最小订单量","value":"FCreatorId"}, {"field":"FModifierId","label":"最后修改人","type":"string","describe":"国家","value":"FModifierId"}, {"field": "FDate", "label": "日期", "type": "string", "describe": "业务状态", "value": "FDate"}, {"field": "FReqNote", "label": "说明", "type": "string", "describe": "地区", "value": "FReqNote"}, {"field": "FEntity_FEntryID", "label": "FEntity_FEntryID", "type": "string", "describe": "", "value": "" }, {"field": "", "label":"","type":"","describe":"","value":"", "autoFillResponse" : true} ], ... } ``` #### 请求参数详解 1. **API**: `executeBillQuery` - 表示我们要调用的具体API。 2. **Effect**: `QUERY` - 表示这是一个查询操作。 3. **Method**: `POST` - 使用HTTP POST方法进行请求。 4. **Number**: `FBillNo` - 单据编号字段。 5. **ID**: `FEntity_FEntryID` - 实体条目ID字段。 6. **Request字段**: - `FID`: 实体主键 - `FBillNo`: 单据编号 - `FDocumentStatus`: 单据状态 - `...` #### 数据请求与清洗 在发起请求之前,我们需要确保请求参数的正确性和完整性。以下是一个典型的请求体示例: ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 数据转换与写入:将BNS分销商与客户对应关系数据集成至目标平台 在数据集成生命周期的第二步,我们需要将已经从源平台集成的BNS分销商与客户对应关系数据进行ETL转换,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台的API接口进行这一过程,确保数据格式符合目标平台的要求。 #### 数据请求与清洗 在进入具体的ETL转换之前,我们假设已经完成了数据请求与清洗阶段。在这个阶段,我们通过API接口从源平台获取了BNS分销商与客户对应关系的数据,并进行了必要的数据清洗和预处理。接下来,我们将重点关注如何将这些清洗后的数据转换为目标平台所能接受的格式,并通过API接口写入目标平台。 #### 数据转换 首先,我们需要对从源平台获取的数据进行格式转换,以符合目标平台API接口的要求。假设我们获取到的数据结构如下: ```json [ { "distributor_id": "D123", "customer_id": "C456", "relation_type": "primary" }, { "distributor_id": "D789", "customer_id": "C012", "relation_type": "secondary" } ] ``` 根据元数据配置,目标平台API接口期望接收的数据格式可能有所不同,因此我们需要进行相应的转换。例如,假设目标平台要求的数据格式如下: ```json [ { "distributorId": "D123", "customerId": "C456", "type": "primary" }, { "distributorId": "D789", "customerId": "C012", "type": "secondary" } ] ``` 我们可以编写一个简单的数据转换函数来实现这一目的: ```python def transform_data(source_data): transformed_data = [] for item in source_data: transformed_item = { "distributorId": item["distributor_id"], "customerId": item["customer_id"], "type": item["relation_type"] } transformed_data.append(transformed_item) return transformed_data ``` #### 数据写入 在完成数据转换后,我们需要通过轻易云集成平台提供的API接口将数据写入目标平台。根据元数据配置,API接口的信息如下: - API: 写入空操作 - 方法: POST - ID检查: true 我们可以使用Python中的`requests`库来实现这一过程: ```python import requests import json def write_to_target_platform(transformed_data): url = 'https://api.targetplatform.com/execute' headers = {'Content-Type': 'application/json'} for data in transformed_data: response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print(f"Data written successfully: {data}") else: print(f"Failed to write data: {data}, Status Code: {response.status_code}") # 示例调用 source_data = [ {"distributor_id": "D123", "customer_id": "C456", "relation_type": "primary"}, {"distributor_id": "D789", "customer_id": "C012", "relation_type": "secondary"} ] transformed_data = transform_data(source_data) write_to_target_platform(transformed_data) ``` 在上述代码中,我们首先定义了一个`transform_data`函数来进行数据格式转换,然后使用`write_to_target_platform`函数通过POST请求将转换后的数据逐条写入目标平台。 #### ID检查 根据元数据配置中的`idCheck: true`,我们需要确保每条记录在写入前进行ID检查,以避免重复或冲突。这可以通过在发送POST请求前,先发送GET请求检查是否存在相同ID的记录来实现。如果存在,则跳过或更新记录;如果不存在,则执行插入操作。 ```python def id_check(distributor_id, customer_id): check_url = f'https://api.targetplatform.com/check?distributorId={distributor_id}&customerId={customer_id}' response = requests.get(check_url) return response.status_code == 200 and response.json().get('exists', False) def write_to_target_platform_with_check(transformed_data): url = 'https://api.targetplatform.com/execute' headers = {'Content-Type': 'application/json'} for data in transformed_data: if not id_check(data['distributorId'], data['customerId']): response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print(f"Data written successfully: {data}") else: print(f"Failed to write data: {data}, Status Code: {response.status_code}") else: print(f"Data already exists, skipping: {data}") # 示例调用 write_to_target_platform_with_check(transformed_data) ``` 通过上述步骤,我们能够有效地将BNS分销商与客户对应关系的数据从源平台经过ETL转换后,安全地写入到目标平台。这一过程不仅保证了数据的一致性和完整性,还提高了系统间的数据交互效率。 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)