ETL转换及写入MySQL的完整实现

  • 轻易云集成顾问-贺强

聚水潭数据集成到MySQL:商品信息单的批量新增

在企业业务系统中,如何高效、准确地将多个源头的数据集成到目标数据库中,始终是一大挑战。本文将分享一个具体案例,即通过轻易云数据集成平台,将聚水潭(Jushuitan)的商品信息单实时批量写入到MySQL数据库,为BI系统提供支持。

聚水潭接口调用与数据抓取

首先,我们需要从聚水潭获取最新的商品信息。这一步骤关键在于使用其开放API /open/sku/query进行抓取操作。为了确保每次调用能成功返回完整且最新的数据,需要处理好分页和限流问题。

  1. 定时可靠的抓取机制

    • 按照预设时间间隔,通过调度器触发API请求。
    • 为了避免超时或请求失败引发的数据丢失,需配置重试机制并记录日志,以便后续分析和修正。
  2. 分页参数及限流保护

    • 使用分页参数逐页获取所有待同步的数据,每页大小依据实际需求设置,并考虑聚水潭API对不同账户权限可能存在的速率限制。
    • 实现合理的延时与并行控制策略,确保多次连续请求不会触发限流惩罚,同时保证有效利用服务器资源,提高吞吐效率。

数据转换与格式化处理

获得原始数据后,由于聚水谭和MySQL之间可能存在数据结构差异,需要自定义转换逻辑以确保两者兼容。例如:

  • 将JSON格式的信息解析为关系型表的数据列
  • 适配特定字段类型,如日期格式、数值精度等
  • 根据业务规则对缺少或者异常值进行标记或填充

通过可视化设计工具,可以直观定义这些转换过程,使得操作更为简洁明了,同时也易于管理调整。

批量写入MySQL:精准高效

为了实现大规模、高频次的数据更新,我们借助了MySQL提供的批量接口 batchexecute,以下是其中几个要点:

  1. 高吞吐量写入能力

    • 因应频繁且大量的新商品信息增补,通过分块方式提交事务,有利于提升整体插入性能,同时降低因单条出错导致全部回滚的问题风险。
  2. 异常处理与错误重试机制

    • 写入过程中如果发生冲突或其他任何错误,则必须记录详细日志,并进行二次重试操作,以保障最终的一致性整合效果。
  3. 监控与告警系统支持

    • 配置相应指标监控关键任务 金蝶与SCM系统接口开发配置

      调用聚水潭接口获取并加工数据的技术案例

在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用聚水潭接口/open/sku/query来获取商品信息,并对数据进行初步加工。

接口配置与请求参数

首先,我们需要配置聚水潭接口的元数据。根据提供的元数据配置,接口为/open/sku/query,请求方法为POST。以下是请求参数的详细配置:

  • page_index: 开始页,默认值为1。
  • page_size: 每页行数,默认值为30,最大值为50。
  • modified_begin: 修改开始时间,使用占位符{{LAST_SYNC_TIME|datetime}}表示上次同步时间。
  • modified_end: 修改结束时间,使用占位符{{CURRENT_TIME|datetime}}表示当前时间。
  • sku_ids: 商品编码,与修改时间不能同时为空,最多20个。

这些参数确保了我们能够灵活地分页获取商品信息,并且可以根据时间范围或特定商品编码进行筛选。

数据请求与清洗

在实际操作中,我们首先需要构建一个有效的请求体。以下是一个示例请求体:

{
  "page_index": "1",
  "page_size": "50",
  "modified_begin": "{{LAST_SYNC_TIME|datetime}}",
  "modified_end": "{{CURRENT_TIME|datetime}}",
  "sku_ids": ""
}

通过发送这个请求,我们可以从聚水潭系统中获取到符合条件的商品信息。接下来,我们需要对返回的数据进行清洗和初步处理。

假设返回的数据格式如下:

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "sku_id": "12345",
      "name": "商品A",
      // 其他字段...
    },
    {
      "sku_id": "67890",
      "name": "商品B",
      // 其他字段...
    }
    // 更多商品信息...
  ]
}

我们需要提取其中有用的信息,例如sku_idname,并将其转换为目标系统所需的格式。

数据转换与写入

在轻易云数据集成平台中,我们可以使用内置的转换工具对数据进行处理。例如,将上述返回的数据转换为目标系统所需的格式:

[
  {
    "商品编码": "12345",
    "商品名称": "商品A"
  },
  {
    "商品编码": "67890",
    "商品名称": "商品B"
  }
]

在这个过程中,我们可能还需要进行一些额外的数据校验和清洗操作,例如去除重复项、处理空值等。这些操作可以通过轻易云平台提供的可视化工具来完成,使得整个过程更加直观和高效。

实时监控与调试

在数据集成过程中,实时监控和调试是确保数据准确性的关键。轻易云平台提供了全面的监控功能,可以实时查看每个环节的数据流动和处理状态。如果出现问题,可以快速定位并解决,从而保证数据集成过程的顺利进行。

通过以上步骤,我们实现了从聚水潭系统获取商品信息并进行初步加工,为后续的数据写入和进一步处理打下了坚实基础。在实际应用中,根据具体需求,还可以进一步优化和扩展这些操作,以满足不同业务场景的需求。 如何对接企业微信API接口

数据集成生命周期第二步:ETL转换与写入MySQL API接口

在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一环。本文将重点探讨如何使用轻易云数据集成平台将已经集成的源平台数据进行ETL转换,并转为目标平台MySQL API接口所能够接收的格式,最终写入目标平台。

元数据配置解析

在本案例中,我们需要将聚水谭的商品信息单数据转换并写入BI花花尚的商品信息表。以下是元数据配置的详细说明:

{
  "api": "batchexecute",
  "effect": "EXECUTE",
  "method": "SQL",
  "idCheck": true,
  "request": [
    {"field": "sku_id", "label": "商品编码", "type": "string", "value": "{sku_id}"},
    {"field": "i_id", "label": "款式编码", "type": "string", "value": "{i_id}"},
    {"field": "name", "label": "商品名称", "type": "string", "value": "{name}"},
    {"field": "short_name", "label": "商品简称", "type": "string", "value": "{short_name}"},
    {"field": "sale_price", "label": "销售价", "type": "string", "value": "{sale_price}"},
    {"field": "cost_price", "label": "成本价", "type": "string", "value": "{cost_price}"},
    {"field": "properties_value", 
     ...
    },
    ...
  ],
  ...
}

上述元数据配置定义了从源平台到目标平台的数据字段映射关系。每个字段都包含fieldlabeltypevalue四个属性,其中value属性使用占位符表示源数据字段。

SQL语句构建

为了将这些字段正确地写入MySQL数据库,我们需要构建相应的SQL语句。在元数据配置中,定义了一个主要的SQL语句模板:

{
  ...
  {
    ...
    {
      ...
      {
        ...
        {
          ...
          {
            ...
            {
              ...
              {
                ...
                {
                  ...
                  {
                    ...
                    {
                      ...
                      {
                        ...
                        {
                          ...
                          {
                            ... 
                            { 
                              ... 
                              { 
                                ... 
                                { 
                                  ... 
                                  { 
                                    ... 
                                    { 
                                      ... 
                                      { 
                                        ... 
                                        { 
                                          ... 
                                          { 
                                            ... 
                                            { 
                                              ... 
                                              { 
                                                ...  
                                                {  
                                                  ...  
                                                  {  
                                                    ...  
                                                    {  
                                                      ...  
                                                      {  
                                                        ...  
                                                        {  
                                                          ...  
                                                          {  
                                                            ...  
                                                            {  
                                                              ...

```sql
REPLACE INTO sku_query (sku_id, i_id, name, short_name, sale_price, cost_price, properties_value, c_id, category, pic_big, pic, enabled, weight, market_price, brand, supplier_id, supplier_name, modified, sku_code, supplier_sku_id, supplier_i_id, vc_name, sku_type, creator, created, remark, item_type, stock_disabled, unit,shelf_life ,labels ,production_licence ,l ,w ,h ,is_series_number ,other_price_1 ,other_price_2 ,other_price_3 ,other_price_4 ,other_price_5 ,other_1 ,other_2 ,other_3 ,other_4 ,other_5 ,stock_type ,sku_codes ,autoid,batch_enabled) VALUES

该SQL语句采用了REPLACE INTO语法,以确保如果记录已经存在,则更新该记录,否则插入新记录。

数据转换与写入

在实际操作中,轻易云数据集成平台会根据上述元数据配置自动生成对应的SQL插入语句,并将从源平台获取的数据填充到这些占位符中。例如:

REPLACE INTO sku_query (sku_id,i_id,name,...)
VALUES ('12345', '67890', 'Example Product', ...)

通过这种方式,所有从聚水谭获取的数据都可以被准确地转换并写入到BI花花尚的MySQL数据库中。

接口调用与执行

最后一步是通过API接口调用来执行这些生成好的SQL语句。在元数据配置中,我们定义了API调用的方法和参数:

{
  ...
  {
    ...
    {
      api: 'batchexecute',
      effect: 'EXECUTE',
      method: 'SQL',
      idCheck: true,
      request: [/*...*/],
      otherRequest: [
        {"field":"main_sql","label":"主语句","type":"string","describe":"111","value":"REPLACE INTO sku_query (sku_id,i_id,name,... ) VALUES"},
        {"field":"limit","label":"limit","type":"string","value":"1000"}
      ]
    }
  }
}

通过调用这个API接口,轻易云数据集成平台会批量执行生成好的SQL语句,将所有转换后的数据写入到目标MySQL数据库中。

总结以上步骤,通过合理配置元数据、构建合适的SQL语句并调用API接口,可以高效地实现从聚水谭到BI花花尚的数据ETL转换和写入过程。这种方法不仅保证了数据的一致性和完整性,还极大提升了系统间的数据交互效率。 用友与SCM系统接口开发配置

更多系统对接方案