简介: 本文主要讲解如何通过insert overwrite更新数据

背景

对于大数据中的大多数存储格式,支持随机更新非常复杂。它需要扫描大型文件,MaxCompute推出了最新的功能Transactional表可以支持update和delete语句,但是update和delete功能不适用于高频更新、删除数据或实时写入目标表场景,同时对于非Transactional表无法执行update和delete。本文主要讲解如何通过insert overwrite更新数据。

1.建表插入数据

create table update_table(ID int,tranValue string,last_update_user string) PARTITIONED by(dt STRING ) LIFECYCLE 1;
INSERT INTO update_table PARTITION (dt="20210510") VALUES
(1, 'value_01', 'creation'),
(2, 'value_02', 'creation'),
(3, 'value_03', 'creation'),
(4, 'value_04', 'creation'),
(5, 'value_05', 'creation'),
(6, 'value_06', 'creation'),
(7, 'value_07', 'creation'),
(8, 'value_08', 'creation'),
(9, 'value_09', 'creation'),
(10, 'value_10','creation');

2.更新一条数据

当id是1的时候更新成value_011

--更新一条数据
INSERT OVERWRITE TABLE update_table PARTITION( dt)
SELECT  id,CASE    WHEN id=1 THEN "value_011" ELSE TranValue END TranValue,last_update_user,dt
FROM    update_table
WHERE   dt = "20210510"
;

3.更新多条数据

根据增量表更新,首先创建增量表插入数据

create table update_table_inc(ID int,TranValue string,last_update_user string) LIFECYCLE 1;
INSERT INTO update_table_inc VALUES
(5, 'value_11', 'creation'),
(6, NULL, '20170410'),
(7, 'value22', '20170413');

id是5和7更新TranValue,由于6的TranValue是null不更新

INSERT OVERWRITE TABLE update_table PARTITION( dt)
SELECT  a.id,CASE    WHEN a.id=b.id  and b.TranValue is not null THEN b.TranValue ELSE a.TranValue END TranValue,CASE    WHEN a.id=b.id and b.TranValue is not null THEN b.last_update_user ELSE a.last_update_user END last_update_user,dt
FROM    update_table a
LEFT JOIN update_table_inc b
ON      a.id = b.id
WHERE   a.dt = "20210510"
;

4.删除数据

--删除数据INSERT OVERWRITE TABLE update_table PARTITION( dt)
SELECT *FROM    update_table
WHERE   dt = "20210510" and id !=4
;

原文链接
本文为阿里云原创内容,未经允许不得转载。

MaxCompute非事务表如何更新数据相关推荐

  1. C# SqlDataAdapter.update结合事务(SqlTransaction)批量更新数据

    //此处的程序功能主要是将一个库中的表数据(源表)更新到另外一个库中的表数据(目标表) //实现目标表的数据和源表数据一致,已包括增加,更新和删除数据记录功能 //主调用代码块 SqlConnecti ...

  2. mysql 回滚失败_Mysql非事务表回滚失败的现象

    执行ROLLBACK(回滚)时,如果收到下述消息,表示事务中使用的1个或多个表不支持事务: 警告:某些更改的非事务性表不能被回滚. 这些非事务性表不受ROLLBACK语句的影响. 如果在事务中意外地混 ...

  3. update关联其他表批量更新数据

    为了做分析,需要整合一些数据到一个表中,涉及到通过主键关联多个表,获取其中的某些字段的值,通过update可以简单实现,找了一篇文章,挺不错: 批量更新表时,update一个表的列时,需要依赖另外的表 ...

  4. update关联其他表批量更新数据-跨数据库-跨服务器Update时关联表条件更新

    1.有时在做项目时会有些期初数据更新,从老系统更新到新系统.如果用程序循环从老系统付给新系统. 2.有时在项目中需要同步程序,或者自动同步程序时会有大量数据更新就可能用到如下方法了. 3.为了做分析, ...

  5. hudi mor表数据ro和rt表问题 rt更新数据表无法使用count

    本人使用canal + kafka + sparkstructedstreaming 将mysql数据同步至hudi,并将hudi与hive集成. 想利用hive查询hudi数据. hudi 在hiv ...

  6. mysql视图数据更新_怎么更新Mysql数据表视图中数据

    本篇文章主要给大家介绍mysql数据表中视图中数据的更新操作. 相关mysql视频教程推荐:<mysql教程> mysql数据表视图的定义及相关操作,如查询.修改.删除.添加等操作介绍,在 ...

  7. 什么是原子DDL?8.0将字典信息存放到事务表中

    前言 MySQL 5.7 的字典信息保存在非事务表中,并且存放在不同的文件中(.FRM,.PAR,.OPT,.TRN,.TRG 等).所有 DDL 操作都不是 Crash Safe,而且对于组合 DD ...

  8. 22、UPDATE多表关联更新

    MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...

  9. mysql 关联更新_MySQL UPDATE多表关联更新

    MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...

最新文章

  1. 提高班第三周周记(中秋第三天)
  2. 【原创翻译】文件与文件夹
  3. 蓝桥杯2015决赛-方格填数-枚举 or dfs
  4. mysql在linux 下安装
  5. .net/c#中栈和堆的区别及代码在栈和堆中的执行流程详解之一(转)
  6. web前端开发初学者十问集锦(3)
  7. awk的关联数组版本支持
  8. SQL注入漏洞-POST注入
  9. 电容式触摸按键原理调研总结
  10. XML约束、如何在xml中引入dtd、dtd语法、ENTITY(实体)
  11. 用php做动态时钟,vue实现动态时钟以及日期
  12. 协调器掉线,路由和终端节点的不同表现
  13. Wincc 开机自检动态展示
  14. 免费的局域网文档协作办公方式—onlyoffice文档协作
  15. 数据链路层详细解剖,并完成实现不同交换机相同VLAN主机之间的通信实验
  16. 管理大师德鲁克60句经典名言
  17. 面试 innodb底层原理
  18. 发送的邮件还能撤回吗?如何撤回已经发出的邮件?
  19. VMware 日记一:基础的系统安装和基本配置解析
  20. css3倒数两个,:nth-last-child()

热门文章

  1. JAVA入门级教学之(浮点型数据类型)
  2. 服务器网站显示多协议,解决高防IIS8服务器https协议多个同时访问的解决方法
  3. hash地址_深入浅出一致性Hash原理
  4. python中的str方法和repr方法_Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些
  5. Java虚拟机JVM的内部体系结构
  6. 成功案例_APP成功推广案例
  7. rfid阅读器的主要任务_RFID阅读器(读写器)的应用领域及其如何使用?
  8. 手机python3l运行_Python3 os.lchflags() 方法
  9. oracle和mysql通用建表语句_mysql建表语句到oracle怎么写?
  10. sklearn svm如何选择核函数_文本挖掘篇|利用SVM进行短文本分类