金蝶云星空数据集成到MySQL的技术实践:ZZ用料清单用料明细数据-删除-制造一处
在企业的信息化建设过程中,实现不同系统间的数据互通是至关重要的一环。本次我们将分享一个实际案例,展示如何利用轻易云平台实现金蝶云星空与MySQL之间高效、可靠的数据集成。具体方案为: ZZ用料清单用料明细数据-删除-制造一处。
在本方案中,我们主要利用了金蝶云星空提供的API接口executeBillQuery
来实时抓取数据,并通过自定义转换逻辑,将其批量写入到MySQL数据库,使用的是其写入API execute
。为了确保整个流程的顺畅与高效,我们充分借助了一系列关键特性和功能:
-
支持高吞吐量的数据写入能力:大规模的数据需要快速、稳定地传输,因此选择适合的大吞吐量配置显得尤为重要。
-
集中监控和告警系统:整个数据集成任务不仅需要保证性能,还要能即时掌握状态。当出现异常时,及时处理预警能够极大提高运维效率。
-
分页和限流处理:为了应对金蝶云星空接口可能存在的分页限制及流量控制机制,在抓取操作中设计了相应的策略以确保完整性与稳定性。
-
定制化数据映射:由于两套系统在结构以及业务规则上的差异,需要进行精准的数据转换,以便最终符合目标数据库(MySQL)的需求。
通过这些步骤和技术手段,我们有效解决了跨平台数据迁移中常见的问题,同时也保障了业务连续性的要求。这只是开篇,引领你了解我们的整体实施思路及亮点。而接下来,我将详细讲述该方案中的每一步具体操作方法和所使用工具,希望对大家有所帮助。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取原始数据。在本案例中,我们将聚焦于如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来获取并加工数据。
接口配置与请求参数
首先,我们需要配置元数据以便正确调用金蝶云星空的executeBillQuery
接口。以下是该接口的元数据配置:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"id": "FEntity_FEntryID",
"name": "FBillNo",
"request": [
{"field": "FID", "label": "实体主键", "type": "string", "value": "FID"},
{"field": "FBillNo", "label": "单据编号", "type": "string", "value": "FBillNo"},
{"field": "fmobillno", "label": "fmobillno", "type": "string", "value": "fmobillno"}
],
...
}
在这个配置中,api
字段指定了要调用的接口名称为executeBillQuery
,请求方法为POST
。关键字段包括:
FID
: 实体主键FBillNo
: 单据编号fmobillno
: fmobillno
此外,还有一些分页和过滤参数,如下所示:
{
...
"otherRequest": [
{"field":"Limit","label":"最大行数","type":"string","describe":"金蝶的查询分页参数","value":"5000"},
{"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":"FPrdOrgId.fnumber in ('T01.01','T04') and FDocumentStatus='C' and FApproveDate>'2024-01-01' and F_FSYNCMOM=0 and left(fmobillno,2)='MO'"},
...
]
}
这些参数用于控制查询结果的分页和过滤条件。例如,Limit
字段设置了每次查询返回的最大行数为5000,FilterString
字段定义了复杂的过滤条件。
数据请求与清洗
在发起请求后,我们会得到一个包含原始数据的响应。为了确保数据质量和一致性,需要对这些原始数据进行清洗和转换。以下是一个简单的数据清洗流程:
- 去除无效记录:根据业务需求,去除不符合条件的数据记录。
- 字段映射:将源系统中的字段映射到目标系统中的相应字段。
- 格式转换:将日期、数字等字段转换为目标系统所需的格式。
例如,如果我们从金蝶云星空获取到如下原始数据:
[
{
"FID": "12345",
"FBillNo": "PO20230101",
...
},
...
]
我们可以通过轻易云平台提供的数据清洗工具,将其转换为目标系统所需的格式。
数据转换与写入
经过清洗后的数据需要进一步转换,以便写入目标系统。在轻易云平台上,可以使用内置的数据转换工具来完成这一过程。例如,可以使用批量保存方法将清洗后的数组数据保存到目标系统中:
{
...
"operation":{
...
,"method":"batchArraySave"
}
}
这种方法能够高效地处理大批量的数据,并确保每条记录都能正确写入目标系统。
实际案例应用
假设我们需要删除制造一处中的用料明细数据,可以通过以下步骤实现:
- 调用API获取原始数据:使用上述元数据配置,通过轻易云平台调用金蝶云星空接口获取用料明细数据。
- 清洗与过滤:根据业务规则,过滤掉不需要删除的数据记录。
- 执行删除操作:将符合条件的数据记录标记为待删除,并通过轻易云平台执行批量删除操作。
通过以上步骤,我们能够高效地实现从源系统获取、清洗、转换并最终写入或删除目标系统中的数据。这不仅提高了业务处理效率,也确保了数据的一致性和准确性。
数据转换与写入目标平台 MySQLAPI接口
在轻易云数据集成平台的生命周期中,数据转换与写入是关键的一步。本文将详细探讨如何将已经集成的源平台数据通过ETL转换,转为目标平台 MySQLAPI接口所能够接收的格式,并最终写入目标平台。
元数据配置解析
首先,我们需要理解元数据配置中的各个字段及其含义:
{
"api": "execute",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "main_params",
"label": "main_params",
"type": "object",
"children": [
{
"field": "FID",
"label": "实体主键",
"type": "string",
"value": "{FID}"
}
]
}
],
"otherRequest": [
{
"field": "main_sql",
"label": "main_sql",
"type": "string",
"describe": "111",
"value": "delete from mbs_assemble_material_detail where fid=:FID"
}
]
}
api
: 指定API接口名称,这里为execute
。effect
: 操作类型,这里为EXECUTE
。method
: HTTP请求方法,这里为POST
。idCheck
: 是否进行ID校验,这里设置为true
。request
: 请求参数列表,包含一个对象类型的参数main_params
,其中包含子字段FID
,代表实体主键。otherRequest
: 其他请求参数,这里包含一个SQL语句,用于删除操作。
数据请求与清洗
在进行数据转换之前,我们首先需要从源平台获取数据并进行清洗。假设我们已经从源平台获取了如下数据:
{
"FID": "12345"
}
数据转换
根据元数据配置,我们需要将上述数据转换为目标平台 MySQLAPI接口能够接收的格式。具体步骤如下:
-
构建请求参数:
- 根据元数据中的
request
字段,我们需要构建一个包含主键的对象。 - 将获取到的
FID
值填充到相应位置。
- 根据元数据中的
-
构建SQL语句:
- 根据元数据中的
otherRequest
字段,我们需要构建一个删除操作的SQL语句。 - 将获取到的
FID
值替换SQL语句中的占位符。
- 根据元数据中的
最终构建的请求体如下:
{
"main_params": {
"FID": "12345"
},
"main_sql": {
"$value$delete from mbs_assemble_material_detail where fid=:FID"
}
}
写入目标平台
最后一步是将转换后的数据通过API接口写入目标平台。我们使用HTTP POST方法,将构建好的请求体发送到指定的API端点。
以下是一个示例代码片段,展示如何使用Python进行该操作:
import requests
import json
url = 'http://your-api-endpoint/execute'
headers = {'Content-Type': 'application/json'}
data = {
'main_params': {
'FID': '12345'
},
'main_sql': 'delete from mbs_assemble_material_detail where fid=:FID'
}
response = requests.post(url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
print('Data successfully written to the target platform.')
else:
print('Failed to write data:', response.text)
通过上述步骤,我们成功地将源平台的数据经过ETL转换后,写入到了目标平台 MySQLAPI接口。这一过程不仅保证了数据的一致性和完整性,还提高了系统集成的效率和可靠性。