简介:文次要解说如何通过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 ,dtFROM update_tableWHERE 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 ,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;
原文链接
本文为阿里云原创内容,未经容许不得转载。