ETL转换并写入聚水潭API的技术方案详解

  • 轻易云集成顾问-张妍琪
### KIS私有云数据集成至聚水潭的技术案例分享 在本次案例中,我们将详细探讨如何通过轻易云数据集成平台,将KIS私有云中的供应商数据信息高效、准确地对接到聚水潭系统。本方案被命名为“KIS-供应商——>空操作”,主要涉及多个技术细节与挑战,包括API接口调用、分页处理、限流机制以及数据格式差异的转换等。 首先,要确保自KIS私有云获取的数据不漏单,是整个集成过程的重中之重。我们使用了定时可靠抓取和实时监控策略,以保证每一条供应商信息都能够完整无缺地从KIS私有云迁移至聚水潭。具体而言,利用/koas/APP006992/api/Vendor/List这一API接口进行数据提取,通过批量方式加速大量数据写入到聚水潭。 为了实现这一点,在脚本自动化执行过程中,我们特别注意了以下几个重点: 1. **处理分页和限流问题**: 每次请求API时,必须考虑服务器返回的数据条目限制以及频率限制。因此,我们设计了智能分页算法来确保获取所有数据,并设置合理的限流控制,避免过多请求带来的访问拒绝。 2. **应对数据格式差异**: KIS私有云与聚水潭之间的数据结构并不完全一致。为此,我们编写了一套灵活而强大的映射规则,对不同字段进行一一对应转换,使得两端系统可以顺利通信。此外,在上传过程中,通过/open/jushuitan/itemsku/upload这个API实现快速且大规模的数据同步。 3. **异常处理与错误重试机制**: 当发生网络延迟或是其他意外情况导致某些数据未成功对接时,为保证最终的一致性,我们引入了完善的错误捕获与重试机制,每一次失败都会记录日志并定期重新尝试发送,直至确认其成功写入目标系统。 以上只是此次项目中的部分技术亮点。在后续内容中,将会进一步介绍这些技术实现上的细节点,以及更全面展示该方案在实际运行中的成果和优化方法。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 调用KIS私有云接口获取并加工数据的技术案例 在数据集成生命周期的第一步,我们需要调用源系统KIS私有云接口`/koas/APP006992/api/Vendor/List`,获取供应商列表数据并进行初步加工。本文将详细探讨这一过程中的技术细节。 #### 接口调用配置 首先,我们需要配置API接口调用的元数据。根据提供的metadata,API接口的基本信息如下: - **API路径**: `/koas/APP006992/api/Vendor/List` - **请求方法**: `POST` - **主要字段**: - `FNumber`: 供应商编号 - `FName`: 供应商名称 #### 请求参数配置 请求参数是调用API接口时必须提供的信息。以下是具体的请求参数配置: 1. **AccountDB**: 数据库账户,值为`001`。 2. **ItemsOfPage**: 每页显示条目数,值为`100`。 3. **CurrentPage**: 当前页码,值为`1`。 4. **StartDate**: 开始日期,使用函数替换同步时间,格式为ISO8601。 5. **EndDate**: 结束日期,使用函数替换当前时间,格式为ISO8601。 ```json { "AccountDB": "001", "ItemsOfPage": "100", "CurrentPage": "1", "StartDate": "_function REPLACE ('{{LAST_SYNC_TIME|datetime}}',' ','T')", "EndDate": "_function REPLACE ('{{CURRENT_TIME|datetime}}',' ','T')" } ``` #### 数据清洗与转换 在获取到原始数据后,需要对数据进行清洗和转换,以便后续处理和存储。以下是一些常见的数据清洗与转换操作: 1. **字段映射**: 将API返回的数据字段映射到目标系统所需的字段。例如,将`FItemID`映射到目标系统的主键字段。 2. **数据格式转换**: 将日期时间格式从ISO8601转换为目标系统所需的格式。 3. **数据过滤**: 根据业务需求过滤掉不必要的数据,例如只保留活跃状态的供应商信息。 #### 详情数据获取 在初步获取和清洗供应商列表后,有时需要进一步获取每个供应商的详细信息。这可以通过调用另一个详情API接口来实现: - **详情API路径**: `/koas/APP006992/api/Vendor/GetDetail` - **详情请求字段**: - `ItemId`: 用于请求详情的字段 - `data`: 详情返回的数据字段 ```json { "otherapi": "/koas/APP006992/api/Vendor/GetDetail", "detailkey": "data", "detailkey1": "ItemId", "detailkey2": "FItemID" } ``` 通过上述配置,可以在获取到供应商列表后,再次调用详情API接口,根据每个供应商的`FItemID`获取其详细信息,并将这些详细信息合并到初步清洗后的数据中。 #### 自动填充响应 为了简化操作流程,可以启用自动填充响应功能,使得每次调用API接口时,系统能够自动处理响应结果并填充到相应的数据模型中。这可以通过设置`autoFillResponse`属性为`true`来实现。 ```json { "buildModel": true, "autoFillResponse": true } ``` #### 实时监控与日志记录 在整个数据集成过程中,为了确保操作透明和可追溯性,可以启用日志记录功能。设置`displayLog`属性为`true`,系统会记录每次API调用及其结果,方便后续审计和问题排查。 ```json { "displayLog": true } ``` 通过以上步骤,我们完成了从KIS私有云接口获取供应商列表并进行初步加工的数据集成过程。这一过程不仅包括了基础的API调用,还涵盖了数据清洗、转换、详情获取以及自动填充响应等多个环节,为后续的数据处理和分析打下了坚实基础。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S30.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入聚水潭API接口 在数据集成的生命周期中,第二步至关重要,即将已经集成的源平台数据进行ETL转换,并转为目标平台能够接收的格式。在本文中,我们将详细探讨如何使用轻易云数据集成平台将KIS-供应商的数据转换并写入聚水潭API接口。 #### API接口配置与元数据解析 在本案例中,目标平台为聚水潭,其API接口路径为`/open/jushuitan/itemsku/upload`,请求方法为POST。我们需要将源平台的数据按照聚水潭API所需的格式进行转换。以下是相关元数据配置: ```json { "api": "/open/jushuitan/itemsku/upload", "effect": "EXECUTE", "method": "POST", "number": "name", "id": "sku_id", "name": "name", "request": [ {"field": "sku_id", "label": "商品编码", "type": "string", "describe": "商品编码", "value": "{F_103}"}, {"field": "i_id", "label": "款式编码", "type": "string", "describe": "款式编码", "value": "{F_103}"}, {"field": "name", "label": "名称", "type": "string", "describe": "名称,可更新", "value": "{FName}"} ], "otherRequest": [ {"field": "dataKey", "label": "dataKey", "type": "string", "describe": "", "value":"items"} ] } ``` #### 数据请求与清洗 首先,我们从KIS-供应商系统中获取原始数据。假设我们已经通过轻易云平台完成了数据请求和初步清洗,得到如下结构的数据: ```json [ { "_id":"12345", "_source":{ "_F_103":"SKU001", "_FName":"商品A" } }, { "_id":"67890", "_source":{ "_F_103":"SKU002", "_FName":"商品B" } } ] ``` #### 数据转换 接下来,我们需要将上述原始数据转换为聚水潭API能够接受的格式。根据元数据配置,每个字段的映射关系如下: - `sku_id` 对应 `{F_103}` - `i_id` 对应 `{F_103}` - `name` 对应 `{FName}` 我们需要编写一个ETL脚本,将上述原始数据进行转换: ```python def transform_data(source_data): transformed_data = [] for item in source_data: transformed_item = { 'sku_id': item['_source']['_F_103'], 'i_id': item['_source']['_F_103'], 'name': item['_source']['_FName'] } transformed_data.append(transformed_item) return transformed_data # 原始数据 source_data = [ { "_id":"12345", "_source":{ "_F_103":"SKU001", "_FName":"商品A" } }, { "_id":"67890", "_source":{ "_F_103":"SKU002", "_FName":"商品B" } } ] # 转换后的数据 transformed_data = transform_data(source_data) print(transformed_data) ``` 输出结果为: ```json [ {"sku_id":"SKU001","i_id":"SKU001","name":"商品A"}, {"sku_id":"SKU002","i_id":"SKU002","name":"商品B"} ] ``` #### 数据写入目标平台 最后一步是将转换后的数据通过POST请求写入到聚水潭API接口。根据元数据配置,除了主要字段外,还需要添加一个额外字段`dataKey`,其值为`items`。 以下是完整的POST请求示例: ```python import requests import json url = 'https://api.jushuitan.com/open/jushuitan/itemsku/upload' headers = {'Content-Type': 'application/json'} payload = { 'dataKey': 'items', 'items': transformed_data } response = requests.post(url, headers=headers, data=json.dumps(payload)) if response.status_code == 200: print('Data successfully uploaded to Jushuitan.') else: print(f'Failed to upload data. Status code: {response.status_code}') ``` 通过以上步骤,我们成功地将KIS-供应商的数据经过ETL处理后,按照聚水潭API要求的格式上传至目标平台。这一过程充分利用了轻易云数据集成平台提供的全生命周期管理功能,实现了不同系统间的数据无缝对接。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)