jjzjj

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

Xin学数据 2024-06-16 原文

生产环境添加列的方法

通过代码新增列

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

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

具体语法和例子如下:

-- MaxComputer新增列
alter table <table_name> add columns (<col_name1> <type1> comment ['<col_comment>'][, <col_name2> <type2> comment '<col_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;

几个注意点:

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

通过表管理新增

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

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

解决方法有好几种:

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

通过DMS新增列

下面讲讲关于DMS的一些操作,在图标左边有三个横杠,将光标移到此处会弹出浮窗,将光标放在全部功能上,这时会出来很多相关的功能供选择。新增列是一个普通数据变更的操作,所以找到它(可直接搜索)。

我操作时只需要填写原因、业务背景、影响行数、还有变更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;

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

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

有关阿里云大数据实战记录4:生产环境添加列的更多相关文章

  1. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  2. ruby - 将 Bootstrap Less 添加到 Sinatra - 2

    我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它

  3. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  4. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  5. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  6. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  7. ruby - 可以通过多少种方法将方法添加到 ruby​​ 对象? - 2

    当谈到运行时自省(introspection)和动态代码生成时,我认为ruby​​没有任何竞争对手,可能除了一些lisp方言。前几天,我正在做一些代码练习来探索ruby​​的动态功能,我开始想知道如何向现有对象添加方法。以下是我能想到的3种方法:obj=Object.new#addamethoddirectlydefobj.new_method...end#addamethodindirectlywiththesingletonclassclass这只是冰山一角,因为我还没有探索instance_eval、module_eval和define_method的各种组合。是否有在线/离线资

  8. ruby - 如何在 Ruby 中向现有方法定义添加语句 - 2

    我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca

  9. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  10. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

随机推荐