人人视频|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/
本文为阿里云原创内容 , 未经允许不得转载 。