人人视频|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 dtFROM update_tableWHERE dt = \"20210510\"; 3.更新多条数据 【人人视频|MaxCompute 非事务表如何更新数据】根据增量表更新首先创建增量表插入数据
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 dtFROM update_table aLEFT JOIN update_table_inc bON a.id = b.idWHERE a.dt = \"20210510\"; 4.删除数据 --删除数据INSERT OVERWRITE TABLE update_table PARTITION( dt)SELECT * FROM update_tableWHERE dt = \"20210510\" and id !=4; 原文链接:http://click.aliyun.com/m/1000284090/
本文为阿里云原创内容 , 未经允许不得转载 。
- 社交|腾讯视频为IP编写「价值算法」
- 快手视频|视频号和抖音快手的差异化在哪里呢?你应该如何选择适合你的平台
- 人人奋勇争先 出彩技能河南
- 网易易盾|腾讯视频片单,一些更值得注意的新现象
- Java|合肥恒泽冠雨讲坛:哪些方法能够快速输出抖音视频内容?
- 苹果|B站首个UP主付费观看视频还是来了!价格“劝退”网友!
- 短视频|互联网上有哪些人能挣到钱?
- 孙洁|短视频挺进在线音乐腹地
- Netflix|B站又搞事情?上线付费短视频,某百万UP主直接当场掉粉过万!
- 短视频|移动互联网存量市场,为何“他们”能够脱颖而出?
