ETL流程:轻易云平台实现MySQL数据转为金蝶云格式并写入

  • 轻易云集成顾问-黄宏棵

CRM-KHWL-客户物料对应表同步金蝶-新增:MySQL数据集成案例

在本技术文章中,我们将解析如何通过轻易云平台实现MySQL数据库与金蝶云星空的系统对接,具体案例为CRM-KHWL-客户物料对应表同步到金蝶的新增任务。本文聚焦于关键技术点和实际操作流程,通过API接口实现高效、可靠的数据集成。

首先,考虑到大量数据需要从MySQL快速写入金蝶云星空,我们采用了支持高吞吐量的数据写入能力的配置方案。这不仅提升了处理时效性,还确保数据不会遗漏。在此过程中,我们使用定时可靠抓取MySQL接口数据(select)的方式,保证获取到最新准确的数据。

同时,对于批量数据集成到金蝶云星空的需求,我们调用了金蝶提供的batchSave API,通过自定义数据转换逻辑来适应特定业务需求和结构差异。此外,为确保每一步操作都清晰可见且问题及时发现与解决,我们利用集中监控和告警系统实时跟踪数据流动状态及性能,并加入了错误重试机制以应对异常情况。

基于灵活可视化的数据流设计工具,我将描述具体步骤,包括如何处理分页和限流问题,有效管理API资产,以及创建一个稳健、高效、透明化的数据集成流程。这些技术要点将帮助大家更好地掌握MySQL与金蝶云星空之间复杂但必要的数据互动。 用友与WMS系统接口开发配置

使用轻易云数据集成平台调用MySQL接口select获取并加工数据

在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何使用轻易云数据集成平台调用MySQL接口select获取并加工数据,重点关注元数据配置和API接口的技术细节。

元数据配置解析

元数据配置是实现数据请求与清洗的关键。以下是我们使用的元数据配置:

{
  "api": "select",
  "effect": "QUERY",
  "method": "POST",
  "number": "单据编号",
  "id": "sourceid",
  "request": [
    {
      "field": "main_params",
      "label": "main_params",
      "type": "object",
      "describe": "111",
      "value": "1",
      "children": [
        {
          "field": "limit",
          "label": "limit",
          "type": "string",
          "value": "1000"
        },
        {
          "field": "offset",
          "label": "offset",
          "type": "string"
        }
      ]
    }
  ],
  "otherRequest": [
    {
      "field": "main_sql",
      "label": "main_sql",
      "type": "string",
      "describe": "",
      ...
    }
  ],
  ...
}

数据请求与清洗

在这个配置中,我们定义了一个POST请求来调用MySQL数据库中的select语句。具体步骤如下:

  1. 定义API接口:通过api字段指定为select,表示我们要执行一个查询操作。
  2. 设置请求方法:通过method字段指定为POST,确保请求方法的一致性。
  3. 参数配置
    • main_params对象包含两个子参数:limitoffset,用于分页查询。其中,limit默认值为1000。
    • otherRequest中的SQL查询语句定义了具体的数据提取逻辑。

SQL查询语句详解

SQL查询语句是整个数据获取过程的核心部分。以下是具体的SQL语句:

SELECT 
  CONCAT('', a.data_id) AS sourceid,
  CONCAT(c.org_code, '_', b.customer_code) AS '单据编号',
  c.org_code AS '销售组织',
  b.customer_code AS '客户编号',
  JSON_UNQUOTE(JSON_EXTRACT(a.customer_name, '$[0].value')) AS '客户名称',
  a.f_pinpai AS '品牌',
  a.product_id AS '产品ID',
  a.cust_material_number AS '客户物料编号',
  a.cust_material_name AS '客户物料名称',
  a.cust_specification_model AS '客户规格型号',
  a.material_number AS '物料编号',
  a.material_name AS '物料名称',
  a.specification_model AS '规格型号',
  a.product_line AS '产品线'
FROM 
  wk_wodtop_customer_material_ref a
LEFT JOIN 
  wk_wodtop_customer b ON a.customer_id = b.data_id
LEFT JOIN 
  wk_wodtop_sales_organization c ON c.data_id = (JSON_UNQUOTE(JSON_EXTRACT(a.sales_org, '$[0].key')))
WHERE 
  a.cust_material_number <> '' AND  
  a.material_number <> '' AND 
  c.org_code <> '' AND 
  sync_1 <> '1'
LIMIT :limit OFFSET :offset;

这段SQL语句从三个表中提取并关联了多个字段,通过JOIN操作实现了复杂的数据整合,并且通过条件过滤确保只提取有效的数据。

请求参数与自动填充响应

在实际操作中,请求参数会自动填充到SQL语句中的:limit:offset位置,实现动态分页查询。此外,通过设置autoFillResponse: true, 平台会自动处理响应结果,将其转换为目标格式。

异常处理与补偿机制

为了确保数据集成过程的可靠性,我们还配置了异常处理与补偿机制。例如,通过设置定时任务(crontab)来定期检查和补偿遗漏的数据请求:

"omissionRemedy":{
    ...
    ,"crontab":"1 1 * * *"
}

该配置表示每小时检查一次,确保任何遗漏的数据都能及时补偿。

通过以上步骤,我们实现了从MySQL数据库高效、可靠地获取并加工数据,为后续的数据转换与写入奠定了坚实基础。 打通钉钉数据接口

使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口

在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术实现过程。

1. 配置元数据

首先,我们需要配置元数据,以便将源数据映射到目标平台所需的格式。以下是元数据配置的详细说明:

{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {
      "field": "FID",
      "label": "FID",
      "type": "string",
      "value": "_findCollection find FID from 9c6a0715-febe-3a94-a928-6fbc7aae0aa1 where FBillNo={{单据编号}}"
    },
    {
      "field": "FBillNo",
      "label": "单据编号",
      "type": "string",
      "value": "{{单据编号}}"
    },
    {
      "field": "FSaleOrgId",
      "label": "FSaleOrgId",
      "type": "string",
      "value": "{{销售组织}}",
      "parser": {
        "name": "ConvertObjectParser",
        "params": "FNumber"
      }
    },
    {
      ...
    }
  ],
  ...
}

2. 数据提取与清洗

在这个阶段,我们从源系统中提取原始数据,并进行必要的清洗和预处理。例如,从CRM系统中提取客户物料对应表的数据,并确保这些数据符合业务需求。

3. 数据转换

接下来,我们使用轻易云平台提供的工具将清洗后的数据转换为金蝶云星空API接口所需的格式。具体步骤如下:

  1. 字段映射:根据元数据配置,将源系统中的字段映射到目标系统中的相应字段。例如,将单据编号映射到FBillNo,将客户编号映射到FCustomerId等。

    {
     ...
     {
       "field": "FBillNo",
       "label": "单据编号",
       "type": "string",
       ...
     },
     {
       ...
     }
    }
  2. 值转换:使用指定的解析器(如ConvertObjectParser)对某些字段进行值转换。例如,将销售组织编码从源系统格式转换为目标系统格式。

    {
     ...
     {
       "field": "FSaleOrgId",
       ...
       "parser": {
         ...
       }
     },
     ...
    }
  3. 数组处理:对于包含子项的数据(如物料明细),我们需要逐项处理并嵌套在主记录中。例如,将物料编号、客户物料编号等信息嵌套在FEntity数组中。

    {
     ...
     {
       ...
       {"field":"FEntity","label":"FEntity","type":"array","children":[
         {"field":"FEntryID","label":"FEntryID","type":"string",...},
         {"field":"FCustMatNo","label":"FCustMatNo","type":"string",...},
         {"field":"FMaterialId","label":"FMaterialId","type":"string",...},
         {"field":"FCustMatName","label":"FCustMatName","type":"string",...},
         {"field":"FEffective","label":"启用","type":"string",...},
         {"field":"F_FCustMatUom","label":"客户规格","type":"string",...}
       ]}
     },
     ...
    }

4. 数据写入

最后,将转换后的数据通过金蝶云星空API接口写入目标系统。我们使用HTTP POST请求来实现这一操作,并根据元数据配置中的参数设置请求体。

{
  ...
  {
    ...,
    {"field":"FormId","label":"业务对象表单Id",...,"value":"SAL_CustMatMapping"},
    {"field":"Operation","label":"执行的操作",...,"value":"BatchSave"},
    {"field":"IsAutoSubmitAndAudit","label":"提交并审核",...,"value":"false"},
    {"field":"IsVerifyBaseDataField","label":"验证基础资料",...,"value":"true"},
    {"field":"IsDeleteEntry","label":"是否删除已存在的分录",...,"value":"false"}
  },
  ...
}

通过上述步骤,我们成功地将源平台的数据经过ETL转换后,写入了金蝶云星空API接口。这一过程不仅保证了数据的一致性和完整性,还提高了业务流程的自动化程度和效率。 用友与外部系统接口集成开发

更多系统对接方案