• 阿里云大数据实战记录4:生产环境添加列


    生产环境添加列的方法

    通过代码新增列

    添加列的时候,要注意引擎类型,可以根据以下操作查看引擎类型。
    如果有权限查看配置相关内容,也可以点配置里查看。(目前我没有该权限,也不知道都有什么内容~~)
    image.png

    为什么要注意引擎类型呢?因为不同的引擎,意味着不同的配置,对应的语法也是不同的,比如mysql的引擎和maxcomputer的引擎新增列的操作不同,下面找了两个文档可供参考
    云原生数据仓库AnalyticDB MySQL版-增加列
    云原生大数据计算服务 MaxCompute-增加列

    具体语法和例子如下:

    -- MaxComputer新增列
    alter table <table_name> add columns (<col_name1> <type1> comment [''][, <col_name2> <type2> comment ''...]);
    -- 例子:新增1列
    alter table customer add columns (customer_name STRING comment '用户名');
    -- 例子:新增2列
    alter table customer add columns (customer_name STRING , age BIGINT);
    
    -- ADB MySQL新增列
    ALTER TABLE db_name.table_name ADD [COLUMN] column_name data_type;
    -- 例子:新增1列
    ALTER TABLE adb_demo.customer ADD COLUMN customer_name varchar comment '用户名';
    -- 例子:新增2列
    ALTER TABLE adb_demo.customer ADD COLUMN customer_name varchar ,ADD COLUMN age varchar;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    几个注意点:

    • 如果使用的是标准模式,需要给开发表和生产表分别新增,如果有同步到外部表,还需要给外部表新增,然后再更新同步的文件,将新增的列关联上。
    • 字符类型需要保证一致,特别是MaxComputer,字符的限制比较严格,如果字段是date类型,而数据是datetime类型,会报错,一旦表单发布到生产环境,还不能修改字符类型,这时就只能重建表单了。关于读取源表的字段的数据类型,可以从数据地图查看。

    通过表管理新增

    除了通过跑代码直接新增,也可以通过表管理打开对应的表单通过可视化新增列。
    下面拿标准模式示例,操作流程如下:
    表管理找到表打开,新增字段之后,先提交到开发环境,再提交到生产环境,便完成列的新增。是不会很简单?
    image.png

    当然了,前提是得有Alter权限,像我在操作一个ADB MySQL的表的时候发现,操作的公共账号,对一些表单只有selectdrop账号,并没有Alter权限。
    没有权限新增列时,通过代码和可视化的方式都无法新增列。

    解决方法有好几种:

    • 给账号申请开通数据库的alter权限
    • 删表重建
    • 通过DMS提工单操作(这个同下)

    通过DMS新增列

    下面讲讲关于DMS的一些操作,在图标左边有三个横杠,将光标移到此处会弹出浮窗,将光标放在全部功能上,这时会出来很多相关的功能供选择。新增列是一个普通数据变更的操作,所以找到它(可直接搜索)。
    image.png
    我操作时只需要填写原因、业务背景、影响行数、还有变更SQL即可,不知是否统一。
    在选择执行方式时,可以选择审批通过后,自动执行,这是系统自动审批,不需要人工审核,提交后便可执行。

    同样,如果没有相关数据库权限,也需要先申请,在全部功能中查找权限工单,然后根据提示填写即可。

    补充MaxCompute的几个问题:

    MaxCompute中,可以添加列,但不可以删除列,也不支持修改列的数据类型和分区字段。
    如果必须修改列,则需要删表重建,并重新加载数据。
    如果必须删除列,可以通过创建新表(选择旧表需要的列)->删旧表->修改新表名为旧表名的形式,举例如下:

    create table new_table_name as select c1,c2,c3 from old_table_name;
    drop table old_table_name; 
    alter table new_table_name rename to old_table_name;
    
    • 1
    • 2
    • 3

    MaxCompute也不支持自增长列功能,如果数据量比较小,也可以使用窗口函数ROW_NUMBER实现。

    更多常见问题参考DDL操作常见问题

  • 相关阅读:
    (附源码)计算机毕业设计Java大学生学科竞赛报名管理系统
    Web前端和Java选哪个?哪个就业形势更好?
    0029【Edabit ★☆☆☆☆☆】Profitable Gamble
    面试官:Java反射是什么?我回答不上来
    Redis详解(3)基础入门(2)
    C++入门教程(十一、宏)
    新库上线 | CnOpenData中国各地区方言信息数据
    BUUCTF---misc---[SWPU2019]我有一只马里奥
    Java并发编程学习篇8_基于开源的配置中心的轻量动态线程池dynamic-tp实践与源码原理分析
    win10错误代码0x80070005解决方法
  • 原文地址:https://blog.csdn.net/qq_45476428/article/details/127701882