MaxCompute非事务表如何更新数据
背景
对于大数据中的大多数存储格式,支持随机更新非常复杂。它需要扫描大型文件,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非事务表如何更新数据的更多相关文章
- MySQL事务表和非事务表
查看 max_binlog_stmt_cache_size 参数解释时,有这么一句话 If nontransactional statements within a transaction requi ...
- update关联其他表批量更新数据-跨数据库-跨服务器Update时关联表条件更新
1.有时在做项目时会有些期初数据更新,从老系统更新到新系统.如果用程序循环从老系统付给新系统. 2.有时在项目中需要同步程序,或者自动同步程序时会有大量数据更新就可能用到如下方法了. 3.为了做分析, ...
- iOS-FMDB事务【批量更新数据】
打开数据库(sqlite) ///打开数据库 + (BOOL)openDataBase{ _TYDatabase = [[FMDatabase alloc]initWithPath:[self dat ...
- 两表关联更新数据——oracle
from testb b where b.id=a.id) ; (where exists(select 1 from testb b where b.id=a.id):如果没有这个条件,不匹配的选项 ...
- 关于mysqldump备份非事务表的注意事项
Preface We're used to get a logical backup set(whole instance) by simply specifying "-- ...
- 深入浅出Oracle数据读取一致性和事务表
保证Oracle数据库读取一致性的关键是SCN.每一个数据块头都会记录一个事务提交的SCN.同时每一数据块头都包含一个事务表(ITL),事务必须获得一个ITL事务表才能进行数据修改.该事务表用来确定当 ...
- 一个数据表通过另一个表更新数据(在UPDAT语句中使用FROM子句)
在sql server中,update可以根据一个表的信息去更新另一个表的信息. 首先看一下语法: update A SET 字段1=B表字段表达式, 字段2=B表字段表达式 from B WHE ...
- Hive ACID和事务表支持详解
一.ACID介绍 ACID就是常见数据库事务的四大特性:Atomicity(原子性).Consistency(一致性).Isolation(隔离性).Durability(持久性). 在Hive 0. ...
- mysql INNODB_TRX 事务表
demo:/root# mysql -uroot -pkjk7787czcb --socket=/data01/mysql/mysql.sock -e"show processlist&qu ...
- Neo4j 第五篇:批量更新数据
相比图形数据的查询,Neo4j更新图形数据的速度较慢,通常情况下,Neo4j更新数据的工作流程是:每次数据更新都会执行一次数据库连接,打开一个事务,在事务中更新数据.当数据量非常大时,这种做法非常耗时 ...
随机推荐
- C 可变参数函数分析(va_start,va_end,va_list...)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- 干货分享 | 3个Zbrush实用减面工具分享
一.使用Sculptris Pro Sculptris Pro是zbrush中的一个功能按钮,点击此工具按钮,同时将笔刷转换至standard笔刷,即可减去需要平滑的面. 点击开启Sculptris ...
- WPF 组件间通信 MVVM 进行解耦
假设有这样一个需求,有这样一个聊天界面,主界面是选项卡,其一选项卡内部是真正的聊天列表和聊天界面,我们需要实时的在主界面显示未读消息的数量 假设我们已经有方法可以拿到未读消息的数量,那么如何在主界面的 ...
- verilog之display
verilog之display 1.函数简介 $display是用于显示不同格式的变量的函数,用于测试过程中观察数据数据的特点.该观测不如波形图直观,但是如果可以详细的设置好观测点,有时可以达到事半功 ...
- 如何在Java中读取超过内存大小的文件
读取文件内容,然后进行处理,在Java中我们通常利用 Files 类中的方法,将可以文件内容加载到内存,并流顺利地进行处理.但是,在一些场景下,我们需要处理的文件可能比我们机器所拥有的内存要大.此时, ...
- Tarjan 算法——图论学习笔记
Part.1 引入 在图论问题中,我们经常去研究一些连通性问题,比如: 有向图的联通性:传递闭包--Floyd 算法: 有向图连通性的对称性:强联通分量(SCC)--Tarjan 算法缩点: 无向图的 ...
- 算法学习笔记【8】| 单调队列优化DP
单调队列:就是滑动窗口,可以求出定长 RMQ,时间复杂度线性. 优化 DP 首先把dp方程写成这个样子: 或者其他运算f[i]=max(或者其他运算){f[j]+calc(i,j)}<scrip ...
- P9966 [THUPC 2024 初赛] 机器人 题解
细节大模拟. 题意 一堆机器人在一起,每个人有左右手和一些指令,依次执行并输出结果. 做法 首先这种指令的执行还算是比较简单的大模拟,一个个实现即可,在此给出我的定义. struct Robot{ i ...
- vector优化
C++的stdvector使用优化 #include<iostream> #include<vector> using namespace std; class Vectex ...
- 如何采用VuePress构建文档网站
作者:倾城 博客: https://www.codingbrick.com 寄语:当你意识到面子不重要时,你才算个真正的成年人. 在建设博客的初期,我采用GitBook构建了编码专家的专栏系统.Git ...