吉客云数据集成到MySQL:采购退货单查询案例分享
在本次技术案例中,我们将详细探讨如何利用轻易云的数据集成平台,将吉客云的采购退货单数据高效地集成到MySQL数据库中。具体方案命名为“吉客云-采购退货单查询-->BI拉伯塔-采购退货单表”,旨在确保数据不漏单并实现定制化的数据映射对接。
首先,使用erp.storage.goodsdocout.v2
API接口从吉客云获取原始的采购退货单数据。这一过程需要特别注意分页和限流问题,以保证API调用的稳定性与响应速度。在实际运行过程中,通过配置轻易云的平台特性,可实现定时可靠地抓取这一接口的数据,从而避免了手动干预,有效提高了自动化程度。
随后,在处理过程中,我们采用自定义的数据转换逻辑来应对吉客云和MySQL之间的数据格式差异。这一步骤至关重要,因为它直接影响到后续批量集成数据到MySQL的质量。为了确保大量数据能够快速写入MySQL,我们使用了支持高吞吐量能力的平台功能,同时引入集中监控和告警系统,对每一次写入操作进行实时跟踪,及时发现并解决可能出现的问题。
最后,为保证整个流程中的异常处理能力,我们设计了一套完善的错误重试机制。在面对突发情况时,如网络波动或系统故障等,可以可靠触发重试,从而保障任务顺利完成。同时,通过可视化的数据流设计工具,使得整体流程更加直观且易于管理,实现全程透明可视化,让所有环节一目了然。
通过以上步骤,本次技术案例不仅展示了如何有效调用吉客云接口 erp.storage.goodsdocout.v2
获取原始数据,并通过 batchexecute
API 将其批量写入 MySQL,还体现出了利用轻易云平台特性的强大优势。接下来部分将深入剖析具体实施细节,为您提供全面指导如何构建此类复杂系统对接方案。
调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据
在数据集成过程中,调用源系统的API接口是关键的一步。本文将详细探讨如何通过轻易云数据集成平台调用吉客云接口erp.storage.goodsdocout.v2
,获取采购退货单数据并进行初步加工。
接口调用配置
首先,我们需要配置API接口的元数据。根据提供的元数据配置,我们可以看到该接口采用POST方法,分页大小为50,每次请求返回的数据量较大。以下是具体的请求参数配置:
- pageIndex: 分页页码,类型为字符串。
- pageSize: 分页页数,类型为字符串,默认值为100。
- goodsDocNo: 入库单号,类型为字符串。
- gmtModifiedStart: 修改时间的起始时间,类型为字符串,通过函数
from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')
获取。 - gmtModifiedEnd: 修改时间的结束时间,类型为字符串,通过函数
from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')
获取。 - startDate: 创建时间的起始时间,类型为日期时间。
- endDate: 创建时间的结束时间,类型为日期时间。
- inouttype: 入库类型,类型为字符串,此处固定值为"205"(采购退货)。
- sourceBillNo: 来源单号,类型为字符串。
- warehouseCode: 仓库编号,类型为字符串。
- vendCode: 供应商编号(往来单位),类型为字符串。
- billNo: 上游单据号(关联单号),类型为字符串。
- userName: 创建人名称,类型为字符串。
- outBillNo: 外部单号(全模糊匹配),类型为字符串。
此外,还需要指定需要返回的字段,通过字段selelctFields
进行配置。该字段包含了详细的数据结构,包括主表和子表信息,如下所示:
"selelctFields": "recId,goodsdocNo,billNo,inOutDate,gmtCreate,inouttype,inouttypeName,vendCustomerName,currencyCode,currencyRate,userName,warehouseCode,warehouseName,comment,memo,logisticName,logisticNo,companyId,companyName,logisticType,logisticCode,inOutReason,sourceBillNo,channelId,channelCode,channelName,redStatus,field1,field2,..."
数据请求与清洗
在完成元数据配置后,我们开始进行数据请求和清洗工作。首先,通过API接口发送POST请求获取采购退货单的数据。在每次请求中,我们需要传递分页参数pageIndex
和pageSize
以控制返回的数据量。
{
"pageIndex": "1",
"pageSize": "100",
"gmtModifiedStart": "_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')",
"gmtModifiedEnd": "_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')",
"inouttype": "205"
}
在接收到响应后,需要对数据进行初步清洗和转换。主要包括以下几个步骤:
-
字段映射与重命名:将API返回的数据字段映射到目标系统所需的字段名称。例如,将
goodsdocNo
映射到目标系统中的documentNumber
。 -
数据格式转换:将日期、金额等字段转换成目标系统所需的格式。例如,将日期格式从“YYYY-MM-DD HH:mm:ss”转换成“YYYYMMDD”。
-
数据过滤与校验:根据业务需求,对返回的数据进行过滤和校验。例如,只保留状态有效的记录,并检查必填字段是否为空。
数据转换与写入
在完成数据清洗后,需要将处理后的数据转换成目标系统所需的格式,并写入到目标数据库或其他存储介质中。这一步通常涉及到ETL工具或自定义脚本,以实现数据从源系统到目标系统的无缝对接。
通过以上步骤,我们可以高效地调用吉客云接口获取采购退货单数据,并进行必要的数据加工,为后续的数据分析和业务决策提供可靠的数据支持。
数据集成平台生命周期的第二步:ETL转换与写入MySQL API接口
在数据集成平台的生命周期中,ETL(提取、转换、加载)是关键的一环。本文将深入探讨如何将吉客云的采购退货单查询数据通过ETL转换,最终写入BI拉伯塔的MySQL数据库。
元数据配置解析
元数据配置是实现数据转换和写入的核心。以下是我们使用的元数据配置:
{
"api": "batchexecute",
"effect": "EXECUTE",
"method": "SQL",
"number": "id",
"id": "id",
"name": "id",
"idCheck": true,
"request": [
{"field":"recId","label":"出库单ID","type":"string","value":"{recId}"},
{"field":"goodsdocNo","label":"出库单ID","type":"string","value":"{goodsdocNo}"},
{"field":"billNo","label":"上游单据号(关联单号)","type":"string","value":"{billNo}"},
{"field":"inOutDate","label":"入库时间","type":"string","value":"{{inOutDate|datetime}}"},
{"field":"gmtCreate","label":"创建时间","type":"string","value":"{{gmtCreate|datetime}}"},
{"field":"inouttype","label":"出入库类型(201-销售出库 202调拨出库 204-其他出库 205采购退货 206生产领料 207组装拆卸出库 208翻新出库 209报废出库 210残次品出库 211倒冲领料 212 包材出库 215维修还厂 299可用库存修正 231成本调整出库)","type":"string","value":"{inouttype}"},
{"field":"inouttypeName","label":"出入库类型(201-销售出库 202调拨出库 204-其他出库 205采购退货 206生产领料 207组装拆卸出库 208翻新出库 209报废出库 210残次品出库 211倒冲领料 212 包材出库 215维修还厂 299可用库存修正 231成本调整出库)","type":"string","value":"{inouttypeName}"},
{"field":"vendCustomerName","label":"往来单位名称","type":"string","value":"{vendCustomerName}"},
{"field":"currencyCode","label":"币种编号","type":"string","value":"{currencyCode}"},
{"field":"currencyRate","label":"币种汇率","type":"string","value":"{currencyRate}"},
{"field":"userName","label":"业务员名字","type":"","value":""},
// ...(省略部分字段)
{"field": "goodsDocDetailList_detailField10", "label": "自定义字段10", "type": "string", "value": "{{goodsDocDetailList_detailField10}}"}
],
"otherRequest":[
{
"field": "main_sql",
"label": "主语句",
"type": "string",
"describe": "SQL首次执行的语句,将会返回:lastInsertId",
"value":
`REPLACE INTO erp_purchreturn_storage_goodsdocout (
recId, goodsdocNo, billNo, inoutDate, gmtCreate, inouttype, inouttypeName, vendCustomerName,
currencyCode, currencyRate, userName, warehouseCode, warehouseName, comment, memo,
logisticName, logisticNo, companyId, companyName, logisticType, logisticCode,
inoutReason, sourceBillNo, channelId, channelCode, channelName,
redStatus, field1, field2, field3,
field4, field5, financeBillStatus,vendCustomerId,
applyDepartId, applyDepartName,outBillNo,gmtModified,
departCode ,applyCompanyName ,applyCompanyCode ,applyCompanyId ,
applyUserId ,applyUserName ,companyCode ,sendCompanyName ,
send ,sendTel ,sendPhone ,sendEmail ,
sendCountryName ,sendProvinceName ,sendCityName ,sendTownName ,
sendStreetName ,sendAddress ,receiveCompanyName ,
receive ,receiveTel ,receivePhone ,
receiveEmail ,receiveCountryName ,
receiveProvinceName ,receiveCityName ,
receiveTownName ,receiveStreetName ,
receiveAddress ,field6 ,
field7 ,field8 ,
field9 ,field10 ,
goodsDocDetailList_recId,
goodsDocDetailList_goodsId,
goodsDocDetailList_goodsNo,
goodsDocDetailList_goodsName,
goodsDocDetailList_skuId,
goodsDocDetailList_skuBarcode,
goodsDocDetailList_unitName,
goodsDocDetailList_cuPrice,
goodsDocDetailList_cuValue,
goodsDocDetailList_caseNumber,
goodsDocDetailList_rowRemark,
goodsDocDetailList_assistUnit,
goodsDocDetailList_estCost,
goodsDocDetailList_estTax,
goodsDocDetailList_estPrice,
goodsDocDetailList_estPriceNoTax,
goodsDocDetailList_estCostNoTax,
goodsDocDetailList_taxRate
) VALUES`
},
{
"field": "limit",
"label": "",
value:1000
}
]
}
数据请求与清洗
在ETL过程中,首先需要从源平台(吉客云)提取采购退货单查询的数据。通过API调用获取原始数据后,进行必要的数据清洗和预处理。例如,将日期字段格式化为目标平台能够识别的标准格式。
import datetime
def format_date(date_str):
return datetime.datetime.strptime(date_str,"%Y-%m-%d %H:%M:%S").strftime("%Y-%m-%d %H:%M:%S")
数据转换
在数据清洗完成后,需要根据目标平台MySQL API接口所要求的数据格式进行转换。通过元数据配置中的request
字段,可以确定每个字段在目标数据库中的映射关系。
例如,将recId
映射到erp_purchreturn_storage_goodsdocout
表中的recId
字段:
INSERT INTO erp_purchreturn_storage_goodsdocout (recId) VALUES ({recId})
数据写入
最后一步是将转换后的数据写入目标平台MySQL数据库。使用元数据配置中的main_sql
作为主语句,通过API接口执行SQL命令,实现批量插入或更新操作。
REPLACE INTO erp_purchreturn_storage_goodsdocout (
recId,goodsdocNo,billNo,inOutDate,gmtCreate,inOutType,inOutType,vendCustomer,vendCustomer,currency,currency,user,user,user,user,user,user,user,user,user,user,user,user,user,user
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
通过这种方式,可以确保不同系统间的数据无缝对接,实现高效的数据集成和管理。