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