• 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
    ;

     

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

  • 相关阅读:
    zabbix 监控机器监听的端口 + 触发器 表达式理解
    php关于文件上传的两个配置项说明
    linux cron计划任务防止多个任务同时运行
    php注册自动加载函数
    linux 下查看机器是cpu是几核的
    laravel容器类make方法解释
    laravel php门面模式
    js获取当前页面的url地址
    php编码规范
    laravel console handle 传参方法
  • 原文地址:https://www.cnblogs.com/yunqishequ/p/15018844.html
Copyright © 2020-2023  润新知