`
dota_00085
  • 浏览: 11155 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

数据集成批处理过程中需要对重复记录进行更新操作,通过ON DUPLICATE KEY UPDATE来实现,

 

第一段sql关于在ON DUPLICATE KEY UPDATE之后使用<when>判断的方法

 <insert id="insertByBatch" parameterType="java.util.List" >
    insert into mf_push_memeber_d (brand_code, if_member_id,
    member_code, mem_name, gender,
    mobile_phone, email, identity_card,
    counter_code_belong, baCodebelong, birth_year,
    birth_day, birth_date, join_date,
    join_time, member_level_code, total_point,
    data_source, create_time, etl_proc_id,
    wx_name, wx_nick_name,
    wx_avatar, wx_invite, wx_level,
    wx_point, wx_usercp, interest_tag,
    wx_age_level, wx_gender, wx_province,
    wx_city, wx_constellation, wx_channelSource,
    wx_platformSource, wx_makeupRate, wx_makeupPurpose,
    wx_makeupFavor,
    match_flag, push_flag, open_id,
    wx_phone_num, subscribe_time, subscribe,
    is_register, add_time, first_flag,
    level_update_flag, last_update_time,integration_id)
    values
    <foreach collection="list" item="item" index="index"
             separator=",">
      (
      #{item.brandCode}, #{item.iFMemberId},
      #{item.memberCode}, #{item.memName}, #{item.gender},
      #{item.mobilePhone}, #{item.email}, #{item.identityCard},
      #{item.counterCodeBelong}, #{item.bacodebelong}, #{item.birthYear},
      #{item.birthDay}, #{item.birthDate}, #{item.joinDate},
      #{item.joinTime}, #{item.memberLevelCode}, #{item.totalPoint},
      #{item.dataSource}, now(), #{item.etlProcId},
      #{item.wxName}, #{item.wxNickName},
      #{item.wxAvatar}, #{item.wxInvite}, #{item.wxLevel},
      #{item.wxPoint}, #{item.wxUsercp}, #{item.interestTag},
      #{item.wxAgeLevel}, #{item.wxGender}, #{item.wxProvince},
      #{item.wxCity}, #{item.wxConstellation}, #{item.wxChannelsource},
      #{item.wxPlatformsource}, #{item.wxMakeuprate}, #{item.wxMakeuppurpose},
      #{item.wxMakeupfavor},
      #{item.matchFlag}, 'Y', #{item.openId},
      #{item.wxPhoneNum}, #{item.subscribeTime}, #{item.subscribe},
      #{item.isRegister}, #{item.addTime}, #{item.firstFlag},
      #{item.levelUpdateFlag},  #{item.lastUpdateTime},#{item.integrationId,jdbcType=VARCHAR}
      )
    </foreach>
    ON DUPLICATE KEY UPDATE
    <choose>
      <when test="item.brandCode !=null and item.brandCode !='' ">
        brand_code = VALUES (brand_code),
      </when>
      <when test="item.iFMemberId !=null and item.iFMemberId !='' ">
        if_member_id = VALUES (if_member_id),
      </when>
      <when test="item.memName != null and item.memName !='' and item.memName != 'null'">
        mem_name = VALUES (mem_name),
      </when>
    </choose>
    mem_name = VALUES (mem_name),
    gender = VALUES (gender),
    member_code = VALUES (member_code),
    total_point = VALUES (total_point),
    data_source = VALUES (data_source),
    etl_proc_id = VALUES (etl_proc_id),
    member_level_code = VALUES (member_level_code),
    email = VALUES (email),
    identity_card = VALUES (identity_card),
    counter_code_belong = VALUES (counter_code_belong),
    baCodebelong = VALUES (baCodebelong),
    birth_year = VALUES (birth_year),
    birth_day = VALUES (birth_day),
    birth_date = VALUES (birth_date),
    join_date = VALUES (join_date),
    join_time = VALUES (join_time),
    mobile_phone = VALUES (mobile_phone),
    push_flag = 'Y',
    first_flag = VALUES (first_flag),
    level_update_flag = VALUES (level_update_flag),
    last_update_time = now()
  </insert>
 

 第一段sql关于在ON DUPLICATE KEY UPDATE之后使用if函数的方法

 <insert id="insertByBatch" parameterType="java.util.List" >
    insert into mf_push_memeber_d (brand_code, if_member_id,
    member_code, mem_name, gender,
    mobile_phone, email, identity_card,
    counter_code_belong, baCodebelong, birth_year,
    birth_day, birth_date, join_date,
    join_time, member_level_code, total_point,
    data_source, create_time, etl_proc_id,
    wx_name, wx_nick_name,
    wx_avatar, wx_invite, wx_level,
    wx_point, wx_usercp, interest_tag,
    wx_age_level, wx_gender, wx_province,
    wx_city, wx_constellation, wx_channelSource,
    wx_platformSource, wx_makeupRate, wx_makeupPurpose,
    wx_makeupFavor,
    match_flag, push_flag, open_id,
    wx_phone_num, subscribe_time, subscribe,
    is_register, add_time, first_flag,
    level_update_flag, last_update_time,integration_id)
    values
    <foreach collection="list" item="item" index="index"
             separator=",">
      (
      #{item.brandCode}, #{item.iFMemberId},
      #{item.memberCode}, #{item.memName}, #{item.gender},
      #{item.mobilePhone}, #{item.email}, #{item.identityCard},
      #{item.counterCodeBelong}, #{item.bacodebelong}, #{item.birthYear},
      #{item.birthDay}, #{item.birthDate}, #{item.joinDate},
      #{item.joinTime}, #{item.memberLevelCode}, #{item.totalPoint},
      #{item.dataSource}, now(), #{item.etlProcId},
      #{item.wxName}, #{item.wxNickName},
      #{item.wxAvatar}, #{item.wxInvite}, #{item.wxLevel},
      #{item.wxPoint}, #{item.wxUsercp}, #{item.interestTag},
      #{item.wxAgeLevel}, #{item.wxGender}, #{item.wxProvince},
      #{item.wxCity}, #{item.wxConstellation}, #{item.wxChannelsource},
      #{item.wxPlatformsource}, #{item.wxMakeuprate}, #{item.wxMakeuppurpose},
      #{item.wxMakeupfavor},
      #{item.matchFlag}, 'Y', #{item.openId},
      #{item.wxPhoneNum}, #{item.subscribeTime}, #{item.subscribe},
      #{item.isRegister}, #{item.addTime}, #{item.firstFlag},
      #{item.levelUpdateFlag},  #{item.lastUpdateTime},#{item.integrationId,jdbcType=VARCHAR}
      )
    </foreach>
    ON DUPLICATE KEY UPDATE
    <choose>
      <when test="item.brandCode !=null and item.brandCode !='' ">
        brand_code = VALUES (brand_code),
      </when>
      <when test="item.iFMemberId !=null and item.iFMemberId !='' ">
        if_member_id = VALUES (if_member_id),
      </when>
    </choose>
    mem_name = if(mem_name!=VALUES (mem_name),VALUES (mem_name),mem_name),
    gender = VALUES (gender),
    member_code = VALUES (member_code),
    total_point = VALUES (total_point),
    data_source = VALUES (data_source),
    etl_proc_id = VALUES (etl_proc_id),
    member_level_code = VALUES (member_level_code),
    email = VALUES (email),
    identity_card = VALUES (identity_card),
    counter_code_belong = VALUES (counter_code_belong),
    baCodebelong = VALUES (baCodebelong),
    birth_year = VALUES (birth_year),
    birth_day = VALUES (birth_day),
    birth_date = VALUES (birth_date),
    join_date = VALUES (join_date),
    join_time = VALUES (join_time),
    mobile_phone = VALUES (mobile_phone),
    push_flag = 'Y',
    first_flag = VALUES (first_flag),
    level_update_flag = VALUES (level_update_flag),
    last_update_time = now()
  </insert>

 第三条,first_flag和level_update_flag是标 记,插入则first_flag 为‘Y’,更新时判断member_level_code会员等级是否发生变化,发生变化则设置level_update_flag为‘Y’,注意此处三行代码的排列顺序,firstflag和level_update_flag的更新语句必须在member_level_code更新语句之前

 

 

 <insert id="insertByBatch" parameterType="java.util.List" >
    insert into mf_push_memeber_d (brand_code, if_member_id,
    member_code, mem_name, gender,
    mobile_phone, email, identity_card,
    counter_code_belong, baCodebelong, birth_year,
    birth_day, birth_date, join_date,
    join_time, member_level_code, total_point,
    data_source, create_time, etl_proc_id,
    wx_name, wx_nick_name,
    wx_avatar, wx_invite, wx_level,
    wx_point, wx_usercp, interest_tag,
    wx_age_level, wx_gender, wx_province,
    wx_city, wx_constellation, wx_channelSource,
    wx_platformSource, wx_makeupRate, wx_makeupPurpose,
    wx_makeupFavor,
    match_flag, push_flag, open_id,
    wx_phone_num, subscribe_time, subscribe,
    is_register, add_time, first_flag,
    level_update_flag, last_update_time,integration_id)
    values
    <foreach collection="list" item="item" index="index"
             separator=",">
      (
      #{item.brandCode}, #{item.iFMemberId},
      #{item.memberCode}, #{item.memName}, #{item.gender},
      #{item.mobilePhone}, #{item.email}, #{item.identityCard},
      #{item.counterCodeBelong}, #{item.bacodebelong}, #{item.birthYear},
      #{item.birthDay}, #{item.birthDate}, #{item.joinDate},
      #{item.joinTime}, #{item.memberLevelCode}, #{item.totalPoint},
      #{item.dataSource}, now(), #{item.etlProcId},
      #{item.wxName}, #{item.wxNickName},
      #{item.wxAvatar}, #{item.wxInvite}, #{item.wxLevel},
      #{item.wxPoint}, #{item.wxUsercp}, #{item.interestTag},
      #{item.wxAgeLevel}, #{item.wxGender}, #{item.wxProvince},
      #{item.wxCity}, #{item.wxConstellation}, #{item.wxChannelsource},
      #{item.wxPlatformsource}, #{item.wxMakeuprate}, #{item.wxMakeuppurpose},
      #{item.wxMakeupfavor},
      #{item.matchFlag}, 'Y', #{item.openId},
      #{item.wxPhoneNum}, #{item.subscribeTime}, #{item.subscribe},
      #{item.isRegister}, #{item.addTime}, 'Y',
      'N',  #{item.lastUpdateTime},#{item.integrationId,jdbcType=VARCHAR}
      )
    </foreach>
    ON DUPLICATE KEY UPDATE
    <choose>
      <when test="item.brandCode !=null and item.brandCode !='' ">
        brand_code = VALUES (brand_code),
      </when>
      <when test="item.iFMemberId !=null and item.iFMemberId !='' ">
        if_member_id = VALUES (if_member_id),
      </when>
    </choose>
    mem_name = if(member_level_code!=VALUES (member_level_code),VALUES (mem_name),mem_name),
    gender = VALUES (gender),
    member_code = VALUES (member_code),
    total_point = VALUES (total_point),
    data_source = VALUES (data_source),
    etl_proc_id = VALUES (etl_proc_id),
    first_flag = if(member_level_code!=VALUES (member_level_code),'N','Y'),
    level_update_flag = if(member_level_code!=VALUES (member_level_code),'Y','N'),
    member_level_code = VALUES (member_level_code),
    email = VALUES (email),
    identity_card = VALUES (identity_card),
    counter_code_belong = VALUES (counter_code_belong),
    baCodebelong = VALUES (baCodebelong),
    birth_year = VALUES (birth_year),
    birth_day = VALUES (birth_day),
    birth_date = VALUES (birth_date),
    join_date = VALUES (join_date),
    join_time = VALUES (join_time),
    mobile_phone = VALUES (mobile_phone),
    push_flag = 'Y',
    last_update_time = now()
  </insert>

 以上三条的合理使用可以避免在java中实现逻辑,使批处理速度提升

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    批处理sql脚本实例

    总结来说,批处理SQL脚本实例是一种结合了操作系统批处理命令和数据库操作的自动化解决方案,它能够帮助IT专业人员高效地管理和维护数据库。使用时,用户需要根据自己的具体环境对脚本进行适当的调整,并确保所有...

    批处理执行sql语句

    批处理在IT行业中,特别是在数据库管理领域,是一个重要的概念,它允许用户一次性处理多个SQL语句,从而提高工作效率,减少数据库交互的次数,提升系统性能。在这个“批处理执行sql语句”示例中,我们可以深入理解...

    mysql批量执行sql文件批处理

    mysql 批量执行 sql文件 批处理,参数和执行方法见附件txt文档

    batchsql:用于 MySQL 和 MariaDB 的批处理 sql 生成器

    批处理sql v1.0.0 有时您只需要运行简单的 SQL 命令。 有时您想将它们组合起来并确保执行顺利。 BatchSQL:没有多余的装饰! BatchSQL允许您运行简单SQL查询。 提交对象数组和批处理 SQL 是即时组合和执行的! ...

    批处理执行sql脚本

    批处理执行SQL脚本是一种常见的数据库管理操作,尤其在需要对大量数据进行处理或自动化数据库维护时非常有用。本文将详细介绍批处理的概念、如何通过批处理执行SQL脚本以及涉及的相关知识点。 批处理(Batch ...

    批处理执行sqlserver的sql文件

    在sqlserver数据库中批处理执行sql文件,这样就不用一条一条执行insert语句

    批处理导入SQL文件

    批处理导入SQL文件是数据库管理中的一个重要操作,它主要用于高效地执行大量SQL语句,比如在数据迁移、数据库初始化或更新时。批处理通过合并多个SQL命令为一个单一的处理单元,可以显著提高数据处理速度,减少网络...

    oracle利用批处理文件执行SQL语句,bat连接oracle数据库并执行语句

    批处理文件(如.bat文件)在Windows环境中是一种高效的方式,可以自动化执行一系列命令,包括连接数据库和执行SQL语句。在这个场景中,我们可以利用批处理文件来简化Oracle数据库的操作,如删除用户、创建用户、创建...

    bat批处理运行sql文件

    bat批处理运行sql文件,

    redis.rar单机版redis,使用MySQL数据库,里面有批处理的SQL,性能十分卓越,单机版经供参考,抛转引玉

    批处理SQL是指一次性执行多个SQL语句,这种方式可以显著提高数据库操作的效率,尤其是在进行大量数据操作时。在提供的压缩包中,可能存在这样的SQL脚本,帮助用户快速导入或初始化数据,这对于快速设置测试环境或...

    用osqlocmd批处理批量执行sql文件

    osql批处理过大sql文件,osql 并不支持 SQL Server 2008的所有功能,如果需要使用SQL Server 2008的所有功能用osql执行sql脚本

    批处理文件一键开启、关闭sql服务

    批处理文件,一键开启sql服务。还可自定义开启任何服务和关闭任何服务

    SQL语句格式化工具破解版

    SQL格式化工具破解版,SQL格式化,工具破解版.网上收集

    执行SQL语句的批处理

    Oracle数据库系统提供了一系列工具来实现SQL语句的批处理,允许用户批量执行SQL脚本,从而一次性完成多个数据库操作。下面,我们将详细探讨如何在Oracle环境下进行SQL批处理。 首先,我们需要了解Oracle数据库的...

    数据库服务开关批处理

    数据库服务 批处理 sql orcler 方便开启数据库服务的批处理文件 支持多个数据库

    批处理文件执行sql语句

    5. **SQL语句的批处理执行**:在批处理文件中,你可以通过命令行工具将SQL语句作为参数传递,或者将SQL语句写入到批处理文件中,通过工具读取并执行。例如,使用SQLCMD,批处理文件可能如下所示: ```batch @echo ...

    用批处理运行sqlserver语句.zip_checkbgq_riceitt_sql_topicynh_批处理

    标题“用批处理运行sqlserver语句.zip_checkbgq_riceitt_sql_topicynh_批处理”揭示了这个压缩包内容的核心,它涉及到在Windows环境下使用批处理(batch processing)来执行SQL Server的查询或命令,并将运行结果...

    批处理实现sqlserver 2005远程异地数据库备份

    ### 批处理实现SQL Server 2005远程异地数据库备份 #### 背景介绍 随着企业数据量的不断增长以及对数据安全性的日益重视,数据库备份成为了必不可少的操作之一。对于那些部署了SQL Server 2005的企业来说,进行远程...

    SQL脚本批处理

    SQL脚本批处理就是一个很好的例子,它展示了如何通过自动化来提升工作效率。下面将详细解释这个工具及其相关的知识点。 首先,"SQL脚本批处理"是一个功能强大的工具,允许用户一次性执行一个文件夹内包含的所有SQL...

    SQL查询分析工具 SQL Workbench/J

    7. **脚本执行**:支持批处理SQL脚本,方便执行一系列数据库操作,如创建表、填充测试数据或执行数据库维护任务。 8. **数据库比较**:通过对比不同数据库实例或数据库版本,可以找出差异并生成同步脚本,帮助保持...

Global site tag (gtag.js) - Google Analytics