功能

MaxCompute支持了deleteupdate功能,但当您需要使用多个insertupdatedelete对目标表进行批量操作时,需要编写多条SQL语句,然后进行多次全表扫描才能完成操作。MaxCompute提供的merge into功能,只需要进行一次全表扫描操作,就可以完成全部操作,执行效率要高于insert+update+delete

merge into操作具备原子性,作业中的insertupdatedelete操作都执行成功时,作业才算执行成功;任一内部逻辑处理失败,则整体作业执行失败。

同时,merge into可以为您避免分别执行insertupdatedelete操作时,可能导致部分操作执行成功,部分操作执行失败,其中成功部分无法回退的问题。

使用限制

merge into功能的使用限制如下:

  • 仅支持Transactional表。更多创建Transactional表信息,请参见表操作。
  • 不允许在同一条merge into语句中对相同的行执行多次insertupdate操作。

查看是否是Transactional表

>desc extended t1;

sql语句

格式

merge into <target_table> as <alias_name_t> using <source expression|table_name> as <alias_name_s>
--从on开始对源表和目标表的数据进行关联判断。
on <boolean expression1>
--when matched…then指定on的结果为True的行为。多个when matched…then之间的数据无交集。
when matched [and <boolean expression2>] then update set <set_clause_list>
when matched [and <boolean expression3>] then delete
--when not matched…then指定on的结果为False的行为。
when not matched [and <boolean expression4>] then insert values <value_list>

实例

MERGE INTO xgj.classes_out AS t1 USING
(SELECT  cls_id,name FROM    (SELECT  *,ROW_NUMBER() OVER(PARTITION BY cls_id ORDER BY name DESC) AS rownumFROM    xgj.locations_dealWHERE   ds = '${bizdate}') WHERE   rownum = 1) AS  t2 ON t1.cid =t2.cls_id AND t1.ds ='${bizdate}'
WHEN matched THEN UPDATE SET t1.school_name = t2.name;

其他数据库支持merge into 应该都是可以这样去更新的

阿里云文档

MaxCompute动态更新表中某个(多个)字段的数据相关推荐

  1. mysql触发器 当记录的指定字段发生变化时,更新表中的另外一个字段,或者更新另外一张关联表中关联记录的字段...

    2019独角兽企业重金招聘Python工程师标准>>> 注意:语句中出现的old,new,now(),都为数据库自带的关键字,此处不做解释. 两种情况: 第一种:一张表中,更新某条记 ...

  2. MySQL数据库使用连接更新表中某个字段数据

    连接更新表中数据使用: update .. join .. 语句 上一篇博文创建了一个商品分类表(good_cates),并完成了商品分类信息的插入,如果需要更新goods表中的商品分类信息,把商品分 ...

  3. MySQL数据库-更新表中的数据详解

    更新书记记录是数据操作中常见的操作,可以更新表中已经存在数据记录中的值.在MySQL中可以通过UPDATE语句来实现更新数据记录,该SQL语句可以通过如下几种方式使用:更新特定数据记录,更新所有数据记 ...

  4. oracle复制另一个字段,【学习笔记】Oracle存储过程 表中列不同时动态复制表中数据到另一个表中...

    天萃荷净 分享一篇关于Oracle存储过程实现表之间数据复制功能.两表中列不同,动态的将一表中的数据复制到另一个表中案例 因为要用到回收站功能,删除一条记录,要先放到一个delete表中,以便以后恢复 ...

  5. MySQL - 更新表中的数据记录

    更新表中的数据记录 更新数据记录是数据操作中常见的操作,可以更新表中已经存在数据记录中的值.在MySQL中可以通过UPDATE语句来实现更新数据记录,该SQL语句可以通过如下几种方式使用:更新特定数据 ...

  6. SQL UPDATE 语句(更新表中的记录)

    SQL UPDATE 语句 UPDATE 语句用于更新表中已存在的记录. 还可以使用AND或OR运算符组合多个条件. SQL UPDATE 语法 具有WHERE子句的UPDATE查询的基本语法如下所示 ...

  7. Python处理Excel表中单元格带有换行的数据

    Python处理Excel表中单元格带有换行的数据 文章目录 Python处理Excel表中单元格带有换行的数据 问题样式 实例问题 实例实现代码 实例结果 问题样式 在数据处理过程中常常会遇到这样一 ...

  8. mysql 查询两个字段相同的数据_sql语句如何查询一个表中某两个字段的相同数据?...

    查询一个表中某两个字段的相同数据代码是:Select Name,ID From A group by Name,ID having count (*)>1. 结构化查询语言(Structured ...

  9. 如何从Oracle数据库中的表中获取列名(字段名)列表?

    如何从Oracle数据库中的表中获取列名(字段名)列表? 目录 如何从Oracle数据库中的表中获取列名(字段名)列表? #示例一 #示例二 示例三: #示例一 可以获取: table_name:表名 ...

最新文章

  1. How to protect video content (Flash Media Server)
  2. [ZJOI2007]仓库建设(斜率优化)
  3. 第一篇博客文章,hello world及编码
  4. 纯css3开发的响应式设计动画菜单(支持ie8)
  5. vue输入框联想词功能
  6. 计算机设备维修税率是多少,设备维修税率是多少
  7. (翻译)31天Windows Phone学习-1-项目模板
  8. C++常见面试题(2019年校招总结)
  9. IOS开发-我的第一个IOS程序
  10. LabVIEW之安装队列工具包AMC安装问题解决
  11. C++ 中的mutable关键字
  12. WebForm控件多字段绑定
  13. day20,日志和正则表达式
  14. 原理解析!传智播客java基础入门第二版课后答案
  15. 计算机u盘序列号,注册表查询usb设备序列号,u盘电序列号注册表
  16. CDN技术原理以及所用技术介绍
  17. 【工具脚本】目标检测数据样本的扩增脚本
  18. 4 种最安全的 MacBook 电池更换选项
  19. 【机器学习】浅谈 归纳偏置 (Inductive Bias)
  20. 运行时栈帧结构是怎样的?

热门文章

  1. Rocksdb 获取当前db内部的有效key个数 (估值)
  2. 设计模式 之美 --- 初篇
  3. linux进程间通信:POSIX 消息队列 ----异步通信
  4. 戏说 .NET GDI+系列学习教程(三、Graphics类的应用_验证码)
  5. Vue组件绑定自定义事件
  6. vue.js 源代码学习笔记 ----- 工具方法 lang
  7. 07、C语言——函数
  8. C语言之分支结构 if(一)
  9. nodeJS之eventproxy源码解读
  10. WSDL、SOAP、UDDI