MaxCompute非事务表如何更新数据
Posted 阿里云云栖号
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MaxCompute非事务表如何更新数据相关的知识,希望对你有一定的参考价值。
简介:文主要讲解如何通过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
;
原文链接
本文为阿里云原创内容,未经允许不得转载。
以上是关于MaxCompute非事务表如何更新数据的主要内容,如果未能解决你的问题,请参考以下文章