简介:文次要解说如何通过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;

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