高效集成SQLServer数据到金蝶云星空的实战案例

  • 轻易云集成顾问-贺强
### SQL Server数据集成到金蝶云星空:泛微项目对接案例 在本次技术案例中,我们将详细探讨如何通过轻易云数据集成平台,将SQL Server中的业务数据高效、安全地集成到金蝶云星空系统中。此次的实际应用场景是“泛微项目=>金蝶辅助资料项目”,目标是实现从SQL Server抓取接口数据并批量写入金蝶云星空。 首先,需要处理的是API接口调用的问题。在SQL Server端,我们采用`select`语句获取源数据,而导入至金蝶云星空则利用其提供的`batchSave` API进行大批量的数据写入。这种方法能有效提升大量数据的处理时效性,确保业务流程顺畅运行。 1. **高吞吐量的数据写入能力**:为了支持大规模数据的快速传输,在配置过程中需特别注意数据库连接池和线程调度的优化,确保每个任务都有充足资源促进效率最大化。 2. **集中监控和实时告警**:整个过程使用了平台内置的集中监控与告警模块,不仅可以实时跟踪每个任务状态,还能针对潜在异常自动发送告警,保证问题早发现、早解决,从而避免系统长时间停滞不前。 3. **分页和限流机制**:为了解决SQL Server API接口可能存在的分页与限流问题,我们在代码层面加入了动态分页逻辑,同时设置合理阈值,以此分阶段逐步完成全量同步操作。这样既避免了一次性读写过多导致性能瓶颈,也提高了整体稳定性。 4. **自定义转换逻辑及格式差异处理**:考虑到两套系统之间的数据结构存在差异,通过平台提供自定义转换功能,将获取到的数据按需求重新映射、整理,最终以兼容格式推送至目标系统。这一步骤不仅涉及字段重命名,还涵盖类型转换等复杂操作,是保障集成成功的重要环节之一。 5. **异常检测与错误重试机制**:集成过程中难免会出现各种不可预见的问题,为此我们配置了完善异常捕捉与错误重试策略。一旦某条记录因网络抖动或其它原因未能成功插入,会被标记并排队等待后续再次尝试提交,使得整个流程更加健壮可靠。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/D26.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用SQL Server接口获取并加工数据 在数据集成的生命周期中,第一步是从源系统中调用接口获取数据。本文将详细探讨如何使用轻易云数据集成平台配置元数据,从SQL Server接口select获取并加工数据。 #### 配置元数据 首先,我们需要理解元数据配置的各个部分,以便正确调用SQL Server接口。以下是一个典型的元数据配置示例: ```json { "api": "select", "effect": "QUERY", "method": "POST", "number": "xmbh", "id": "id", "idCheck": true, "request": [ { "field": "main_params", "label": "main_params", "type": "object", "describe": "111", "children": [ { "field": "fetch", "label": "fetch", "type": "int", "value": "_function 100*1" }, { "field": "offset", "label": "offset", "type": "int", "value": "_function 0*0" } ] } ], "otherRequest": [ { "field": "main_sql", "label": "main_sql", "type": "string", "describe": "111", "value":"SELECT * FROM uf_SupXDW_ProjectT_dt1 ORDER BY (SELECT NULL) OFFSET :offset ROWS FETCH NEXT :fetch ROWS ONLY" } ], ``autoFillResponse``: true, ``condition_bk``: [[{"field":"xmbh","logic":"gt","value":"0"}]] } ``` #### API 接口调用 在这个配置中,`api`字段指定了我们要调用的API类型为`select`,表示我们将执行一个查询操作。`effect`字段为`QUERY`,表明这是一个查询操作,而非插入或更新。 #### 请求参数设置 请求参数通过`request`字段进行定义。在这个例子中,我们定义了一个名为`main_params`的对象,其中包含两个子参数:`fetch`和`offset`。这两个参数用于分页查询,分别表示每次获取的数据条数和偏移量。 - `fetch`: 设置为每次获取100条记录。 - `offset`: 设置为从第0条记录开始。 这些参数通过 `_function` 表达式进行动态计算,以便在实际运行时根据需求调整。 #### SQL 查询语句 核心查询语句通过 `otherRequest` 字段中的 `main_sql` 定义。这里我们使用了一个分页查询语句: ```sql SELECT * FROM uf_SupXDW_ProjectT_dt1 ORDER BY (SELECT NULL) OFFSET :offset ROWS FETCH NEXT :fetch ROWS ONLY ``` 该语句使用了SQL Server的分页功能,通过`:offset`和`:fetch`参数控制返回的数据范围。 #### 自动填充响应 设置 `autoFillResponse: true` 表示平台会自动处理并填充响应结果,这样可以简化后续的数据处理步骤。 #### 条件过滤 最后,通过 `condition_bk` 字段定义了一个简单的过滤条件:只返回 `xmbh > 0` 的记录。这确保了我们只处理有效的数据条目。 #### 实际应用案例 假设我们需要从SQL Server数据库中的 `uf_SupXDW_ProjectT_dt1` 表中获取项目编号大于0的记录,并且每次获取100条记录。我们可以按照上述配置进行元数据设置,然后通过轻易云平台发起请求。 具体步骤如下: 1. **配置元数据**:按照上述示例进行元数据配置。 2. **发起请求**:通过轻易云平台发起POST请求,传递分页参数(如初始时 `offset=0`, `fetch=100`)。 3. **处理响应**:平台自动填充响应结果,并根据条件过滤有效记录。 4. **循环获取**:如果需要获取更多记录,可以调整 `offset` 参数(如 `offset=100`, `fetch=100`) 再次发起请求,直到获取到所有所需数据。 通过这种方式,我们可以高效地从SQL Server数据库中提取并加工所需的数据,为后续的数据转换与写入阶段做好准备。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台实现这一过程,特别是如何配置元数据以确保数据正确转换和写入。 #### 元数据配置解析 在进行ETL转换时,元数据配置是关键。以下是我们需要配置的元数据: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "FNumber", "label": "FNumber", "type": "string", "describe": "111", "value": "{xmbh}"}, {"field": "FDataValue", "label": "FDataValue", "type": "string", "describe": "111", "value": "{xmbh}"}, {"field": "FId", "label": "FId", "type": "string", "describe": "111", "value": "001", "parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field": "F_WMMX_OAId", "label":"OA回传内码","type":"string","value":"{id}"} ], "otherRequest":[ {"field":"FormId","label":"FormId","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"BOS_ASSISTANTDATA_DETAIL"}, {"field":"Operation","label":"Operation","type":"string","value":"BatchSave"}, {"field":"IsAutoSubmitAndAudit","label":"IsAutoSubmitAndAudit","type":"bool","value":"true"}, {"field":"IsVerifyBaseDataField","label":"IsVerifyBaseDataField","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"false"} ], "operation":{"rowsKey":"array","rows":1,"method":"batchArraySave"} } ``` #### 数据请求与清洗 首先,我们需要从源系统中提取相关的数据。在这个案例中,我们假设已经完成了从泛微项目中提取数据的步骤,并且这些数据已经被清洗和准备好用于转换。 #### 数据转换与写入 1. **API接口配置**: - `api`: 设置为`batchSave`,表示我们使用的是批量保存接口。 - `effect`: 设置为`EXECUTE`,表示执行操作。 - `method`: 设置为`POST`,指明HTTP请求方法。 - `idCheck`: 设置为`true`,启用ID检查。 2. **请求字段配置**: - `FNumber` 和 `FDataValue`: 都设置为字符串类型,并且值来自于变量 `{xmbh}`。这两个字段用于标识项目编号。 - `FId`: 固定值为 `"001"`,并且使用了一个名为 `ConvertObjectParser` 的解析器,将 `params` 设置为 `FNumber`。这意味着在写入之前会对该字段进行特定的对象转换。 - `F_WMMX_OAId`: 来自于变量 `{id}`,用于记录OA回传内码。 3. **其他请求参数**: - `FormId`: 固定值 `"BOS_ASSISTANTDATA_DETAIL"`,这是金蝶表单ID。 - `Operation`: 固定值 `"BatchSave"`,表示批量保存操作。 - `IsAutoSubmitAndAudit`: 布尔值设置为 `true`,表示自动提交和审核。 - `IsVerifyBaseDataField`: 布尔值设置为 `false`,表示不验证所有基础资料有效性。 4. **操作配置**: - `rowsKey`: 设置为 `"array"` 表示操作的数据结构是数组。 - `rows`: 设置为1,即每次处理一行数据。 - `method`: 设置为 `"batchArraySave"` 表示批量保存的方法。 #### 实际操作步骤 1. **提取源数据**:通过轻易云平台,从泛微项目中提取所需的数据,并进行初步清洗和处理。 2. **配置ETL规则**:根据上述元数据配置,在轻易云平台上设置ETL规则,包括字段映射、解析器应用等。 3. **执行转换**:利用轻易云平台的可视化界面或API调用,将清洗后的源数据按照配置好的规则进行转换。 4. **写入目标系统**:通过HTTP POST请求,将转换后的数据发送到金蝶云星空API接口,实现批量保存。 通过以上步骤,我们能够高效地将源系统中的数据转换并写入到金蝶云星空,实现不同系统间的数据无缝对接。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。 ![打通企业微信数据接口](https://pic.qeasy.cloud/T29.png~tplv-syqr462i7n-qeasy.image)