ETL转换和数据写入:轻易云平台与金蝶云星空的数据对接

  • 轻易云集成顾问-张妍琪
### 案例分享:金蝶云星空数据集成到轻易云平台,实现业务员信息查询 在本技术案例中,我们将探讨如何通过轻易云数据集成平台对接金蝶云星空系统,重点讲解如何配置和调用`executeBillQuery` API,从而实现业务员信息的高效查询。 为了确保所有步骤能够顺利进行并且不漏单,我们综合运用了轻易云多项功能特性,包括高吞吐量的数据写入能力、集中监控与告警系统以及自定义的数据转换逻辑。接下来,本案例将聚焦于以下几个关键方面: 1. **大数据快速写入**:利用轻易云强大的数据处理引擎,提高了大量业务员数据的写入速度。 2. **API资产管理**:通过统一视图全面掌握API使用情况,实现资源优化。 3. **异常检测与错误重试机制**:保证在各种异常情况下依然能够稳定获取和处理数据。 4. **接口调用与分页限流问题解决方案**:细化展示如何应对分页和限流问题,使得整个过程更加顺畅。 具体操作涉及多个层面的设置,例如定时抓取金蝶云星空接口的数据,并批量集成到轻易云平台;以及实时监控接口状态,确保每次调用都能成功执行。另外,还会介绍如何处理两者之间的数据格式差异,以便更好地完成不同系统间的数据对接任务。 以下是详细配置及具体实施步骤。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D29.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以实现对业务员信息的查询和数据加工。 #### 接口配置与调用 首先,我们需要配置元数据以便正确调用金蝶云星空的`executeBillQuery`接口。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FName", "id": "FNumber", "name": "FNumber", "request": [ {"field":"FName","label":"名称","type":"string","value":"FName"}, {"field":"FNumber","label":"编码","type":"string","value":"FNumber"}, {"field":"FID","label":"FID","type":"string","value":"FID"}, {"field":"FStaffNumber","label":"FStaffNumber","type":"string","value":"FStaffNumber"} ], "otherRequest": [ {"field":"Limit","label":"最大行数","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"StartRow","label":"开始行索引","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_START_ROW}"}, {"field":"TopRowCount","label":"返回总行数","type":"int","describe":"金蝶的查询分页参数"}, {"field":"FilterString","label":"过滤条件","type":"string","describe":"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=","value":"FModifyDate>='{{LAST_SYNC_TIME|dateTime}}'"}, {"field":"FieldKeys","label":"需查询的字段key集合","type":"array","describe":"金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber", "parser":{"name": "ArrayToString", "params": ","}}, {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "BD_Empinfo"} ], "autoFillResponse": true } ``` #### 请求参数解析 1. **基本请求字段**: - `FName`: 名称 - `FNumber`: 编码 - `FID`: FID - `FStaffNumber`: 员工编号 2. **其他请求字段**: - `Limit`: 最大行数,用于分页控制。 - `StartRow`: 开始行索引,用于分页控制。 - `TopRowCount`: 返回总行数。 - `FilterString`: 过滤条件,例如`"FSupplierId.FNumber = 'VEN00010' and FApproveDate>="`。 - `FieldKeys`: 查询字段key集合,使用逗号分隔。 - `FormId`: 表单ID,此处为`BD_Empinfo`,表示业务员信息。 #### 数据请求与清洗 在实际操作中,通过POST方法向金蝶云星空发送请求,获取所需的数据。以下是一个示例请求体: ```json { "FormId": "BD_Empinfo", "FieldKeys": ["FID", "FName", "FNumber", "FStaffNumber"], "FilterString": "FModifyDate>='2023-01-01'", "Limit": 100, "StartRow": 0, ... } ``` 通过上述请求,我们可以获取到符合条件的数据。在轻易云平台中,这些数据会自动填充到响应中,便于后续处理。 #### 数据转换与写入 在获取到原始数据后,需要对其进行必要的清洗和转换。例如,将日期格式标准化、去除无效字符等。最终,将处理后的数据写入目标系统或数据库中。 以下是一个简单的数据转换示例: ```python def clean_data(data): for record in data: record['FName'] = record['FName'].strip() record['ModifyDate'] = standardize_date(record['ModifyDate']) return data def standardize_date(date_str): # 假设输入格式为 YYYY-MM-DD HH:MM:SS return date_str.split(' ')[0] ``` 通过上述步骤,我们能够确保从源系统获取的数据经过清洗和转换后,符合目标系统的要求。 #### 总结 本文详细介绍了如何通过轻易云数据集成平台调用金蝶云星空接口`executeBillQuery`获取并加工业务员信息。从元数据配置、请求参数解析,到数据请求与清洗,再到最终的数据转换与写入,每一步都至关重要。希望这些技术细节能够为您的系统集成工作提供有价值的参考。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/S13.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换和数据写入 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台轻易云集成平台API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中的技术细节,特别是如何利用元数据配置来实现这一目标。 #### 数据请求与清洗 在进行ETL转换之前,我们首先需要从源平台获取原始数据,并对其进行必要的清洗和预处理。假设我们从金蝶系统中查询到业务员的数据,这些数据可能包含冗余信息或格式不一致的问题。因此,我们需要对这些原始数据进行清洗,确保其符合后续处理的要求。 ```json { "data": [ {"id": "001", "name": "张三", "department": "销售部", "status": "active"}, {"id": "002", "name": "李四", "department": "市场部", "status": "inactive"}, // 更多业务员数据... ] } ``` #### 数据转换 清洗后的数据需要进行转换,以符合目标平台API接口的要求。根据元数据配置,我们知道目标平台的API接口要求使用POST方法,并且需要检查ID字段。我们可以编写一个转换函数,将源数据转换为目标格式。 ```python def transform_data(source_data): transformed_data = [] for record in source_data: if record["status"] == "active": transformed_record = { "api": "写入空操作", "effect": "EXECUTE", "method": "POST", "idCheck": True, "data": { "id": record["id"], "name": record["name"], // 其他必要字段... } } transformed_data.append(transformed_record) return transformed_data ``` 上述代码将源数据中的每个记录转换为符合目标API接口要求的格式,并仅保留状态为"active"的业务员信息。 #### 数据写入 完成数据转换后,我们可以通过调用轻易云集成平台的API接口,将转换后的数据写入目标平台。以下是一个示例代码,展示如何使用Python请求库发送POST请求: ```python import requests def write_to_target_platform(transformed_data): url = 'https://api.qingyiyun.com/write' headers = {'Content-Type': 'application/json'} for record in transformed_data: response = requests.post(url, json=record, headers=headers) if response.status_code == 200: print(f"Record {record['data']['id']} written successfully.") else: print(f"Failed to write record {record['data']['id']}: {response.text}") # 示例调用 source_data = [ {"id": "001", "name": "张三", "department": "销售部", "status": "active"}, {"id": "002", "name": "李四", "department": "市场部", "status": "inactive"} ] transformed_data = transform_data(source_data) write_to_target_platform(transformed_data) ``` 在上述代码中,我们首先定义了一个`write_to_target_platform`函数,该函数接受转换后的数据并逐条发送POST请求至目标平台。每次请求都会检查响应状态码,以确认是否成功写入。 #### 元数据配置解析 元数据配置在整个过程中起到了关键作用。通过解析元数据配置,我们可以确定API接口的方法、效果以及是否需要ID检查等重要信息。这些信息指导了我们如何正确地构建和发送请求,从而确保数据能够顺利写入目标平台。 ```json { "api":"写入空操作", "effect":"EXECUTE", "method":"POST", "idCheck":true } ``` 元数据配置中的`api`字段指定了具体的操作类型,`effect`字段表示该操作的效果,`method`字段明确了HTTP请求方法,而`idCheck`字段则指示是否需要进行ID检查。这些信息在我们的ETL流程中被充分利用,以确保每一步都符合预期。 通过以上步骤,我们成功地将源平台的数据进行了ETL转换,并通过轻易云集成平台API接口将其写入了目标平台。在实际应用中,根据具体需求调整清洗和转换逻辑,可以进一步提升系统集成效率和准确性。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/T9.png~tplv-syqr462i7n-qeasy.image)