精华内容
下载资源
问答
  • 2021-08-31 21:11:58

    背景:CDP7.1.6  Hive3

    执行sql:

    alter table A change column id string int cascade;

    hive已提交,没有语法错误,但执行不了。

    操作:

    create table A_tmp like A;
    
    
    --(默认false),表示开启动态分区功能
    set hive.exec.dynamic.partition =true;
     
    --(默认strict),表示允许所有分区都是动态的,strict/nonstrict,strict 要求至少包含一个静态分区列,nonstrict则无此要求
    set hive.exec.dynamic.partition.mode = nonstrict; 
    insert overwrite table  A_bak partition(dt) select * from A;
    
    drop table A;
    create table A(
    id int,
    xxx  xxx
    .
    .
    .
    )
    partitioned by (dt string);
    insert into A partition(dt) select * from A _bak;
    
    
    更多相关内容
  • 本节主要介绍了mysql如何增加修改字段类型及删除字段类型,需要的朋友可以参考下
  • SQL Server 2008 批量修改字段类型,查询出所有需要修改的字段,然后修改
  • 最近学习了Oracle修改字段类型方法,留做记录。 有一个表名为tb,字段段名为name,数据类型nchar(20)。 1、假设字段数据为空,则不管改为什么字段类型,可以直接执行: alter table tb modify (name nvarchar2(20...
  • 因为前期设计impala外部的时候考虑不足,某些字段设置成int类型,但是随着业务增长数值已经超过了int的最大值,不能满足业务需求,所以要对某些int类型的字段进行修改字段类型为string。但是parquert存储上,做...

    一、需求场景

    众所周知impala和hive是共用一天元数据。因为前期设计impala外部表的时候考虑不足,某些字段设置成int类型,但是随着业务增长数值已经超过了int的最大值,不能满足业务需求,所以要对某些int类型的字段进行修改字段类型为string。但是parquert在存储上,做了加密,二级制存储压缩,因为Impala对Parquet文件中列的顺序很敏感,所以在表的列定义与Parquet文件的列定义顺序不一致时,会导致Impala查询返回的结果与预期不一致。可以参考Impala的JIRA,https://issues.apache.org/jira/browse/IMPALA-779

    场景:

    impala修改表字段语法为:

    ALTER TABLE name CHANGE column_name new_name new_type

    #问题复现

    ALTER TABLE test.page_mv CHANGE ware_goods_id ware_goods_id STRING;


    在impala中我修改page_mv表(parquet表)的ware_goods_id字段从int改成string类型后select查询报错

    ERROR: File '/user/hive/warehouse/page_mv/p_point_day=2019-10-21/p_point_type=1/fd4c71a99_data.0.parq' has an incompatible Parquet schema for column 'page_mv.ware_goods_id'. Column type: STRING, Parquet schema:
    optional int32 ware_goods_id [i:69 d:1 r:0]

    于是乎我改回int类型,查询恢复正常。

    ALTER TABLE test.page_mv CHANGE ware_goods_id ware_goods_id STRING;


    但是我确实需要把ware_goods_id字段类型从int改成string!!!于是我再次尝试

    ALTER TABLE test.page_mv CHANGE ware_goods_id ware_goods_id STRING;


    然后新建一张page_mv_tmp表定义里面ware_goods_id字段是string类型,

    CREATE EXTERNAL TABLE test.page_mv_tmp (                                                  
      data_key STRING COMMENT '数据键md5',                                                                                                                                 
      ware_goods_id STRING COMMENT '入库商品',                                                                                                                          
    )                                                                                                         
    PARTITIONED BY (                                                                                          
      p_point_day STRING COMMENT '日期',                                                                      
      p_point_type INT COMMENT '埋点类型'                                                                     
    )                                                                                                         
    STORED AS PARQUET                                                                                         
    LOCATION 'hdfs://nameservice1/user/hive/warehouse/test/page_mv';
    --这里可以选择指定原来的hdfs路径,也可以选择重新指定一个新的hdfs路径。因为这张是外部表只是对hdfs路径进行映射而已。

    这方面如果想了解可以参考外部表和内部表区别
    hive1.1.0建立外部表关联HDFS文件

    然后执行

    insert overwrite table test.page_mv_tmp partition(p_point_day,p_point_type)  select * from page_mv

    报错说字段类型不匹配!
     

    Expression 'page_mv.ware_goods_id' (type: INT) is not compatible with column 'ware_goods_id' (type: STRING)

    这下看来直接alter parquet表是不可能成功的

    二、解决过程

    在insert overwrite进刚才新建的page_mv_tmp时对这个ware_goods_id字段进行强转,这里用到的是impala的动态分区原理

    insert overwrite table test.page_mv_tmp partition(p_point_day,p_point_type)
    select data_key,CAST(ware_goods_id AS string),p_point_day,p_point_type from test.page_mv;

    通过这样处理把原来page_mv的数据重新导入到page_mv_tmp表中了,而且是动态分区导入到指定日期分区里面,相当于数据自己对号入座了。

    全部导入完成后对page_mv_tmp修改表名即可完成对ware_goods_id字段的类型转换(从int转到string类型)

    ALTER TABLE test.page_mv_tmp RENAME TO test.page_mv;

    总结:其实上述整个过程并不是真正的对parquet进行修改字段类型,只是新建了一张修改好字段类型的新表,然后把原来表的数据以动态分区的方式导入到新表中,再重命名为原来的表名完成的。因为parquet是parquert在存储上,做了加密,二级制存储压缩,不可以修改的,包括去hive中执行也是不行的!

    展开全文
  • MySQL怎么修改字段类型

    千次阅读 2021-01-31 01:31:10
    下面本篇文章就来带大家了解一下alter table语句,介绍如何修改字段类型,希望对大家有所帮助。MySQL中,alter table语句是用于已有的中添加、修改或删除列(字段)的。1、添加字段(列)alter table 表名 add ...

    在MySQL中,可以通过alter table语句来修改表中一个字段的数据类型。下面本篇文章就来带大家了解一下alter table语句,介绍如何修改字段类型,希望对大家有所帮助。

    1175ae11e955823d1e9abd304e81f889.png

    在MySQL中,alter table语句是用于在已有的表中添加、修改或删除列(字段)的。

    1、添加字段(列)alter table 表名 add 字段名 数据类型

    示例:在表 "Persons" 中添加一个名为 "Birthday" 的新列,数据类型为“date”alter table Persons add Birthday date

    说明:新列 "Birthday" 的类型是 date,可以存放日期

    2、修改字段名alter table 表名 rename column A to B

    3、修改字段类型alter table 表名 alter column 字段名 数据类型

    示例:将表 "Persons" 中的 "Birthday" 列的数据类型改为“year”alter table Persons alter column Birthday year

    说明:"Birthday" 列的数据类型是 year,可以存放 2 位或 4 位格式的年份。

    4、删除字段alter table 表名 drop column 字段名

    示例:删除 "Person" 表中的 "Birthday" 列alter table Persons drop column Birthday

    相关视频教程推荐:《MySQL教程》

    以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!

    展开全文
  • Oracle中已有数据修改字段类型

    千次阅读 2022-05-11 15:46:11
    Oracle的中已存在了数据,这时再来修改表字段类型就无法修改。例如, number类型改成number(22),这时数据库会报ORA-01440: column to be modified must be empty to decrease precision or scale 方法1 备份原...

    Oracle的表中已存在了数据,这时再来修改表的字段类型就无法修改。例如,
    number类型改成number(22),这时数据库会报ORA-01440: column to be modified must be empty to decrease precision or scale

    推荐使用方法1,方法2如果字段不能为空就无法使用

    方法1

    备份原表数据,清除表数据,修改字段类型,还原数据

    // 1.创建备份表
    create table test_bak as select * from test;
    // 2.清除原表数据
    truncate table test;
    // 3.修改字段类型
    alter table test modify test_id number(22);
    // 4.还原数据
    insert into test select * from test_bak;
    commit;
    

    方法2

    只备份需要修改的字段的数据,可以在原表上新增备份字段,也可以新建一张表备份字段数据

    // 1.新增字段
    alter table test add test_id_bak number;
    // 2.复制数据
    update test set test_id_bak = test_id;
    commit;
    // 3.清除字段数据并修改字段类型
    update test set test_id = null;
    commit;
    // 4. 修改字段类型
    alter table test modify test_id number(22);
    // 5.还原数据
    update test set test_id=test_id_bak;
    commit;
    // 6.删除临时字段
    alter table test drop column test_id_bak;
    
    展开全文
  • 修改数据库字段类型

    千次阅读 2022-03-24 16:06:38
    数据库中本地化城市字段原来是用char(1)类型来存放的城市对应的编码,但是当城市超过10之后,这里编码的大小从1会变成2,导致数据库中插入时会有数据库异常的情况。 2.解决方法和出现的问题 这里最开始是准备...
  • Elasticsearch 修改索引字段类型

    千次阅读 2021-12-21 20:03:59
    比如需要修改test_index索引中的字段类型 1.先创建test_index_copy索引 2.将test_index 索引_reindex 到test_index_copy ,相当于copy POST _reindex { "source": { "index":"test_index" }, "dest": { ...
  • hive同步clickhouse并且修改字段类型

    千次阅读 2022-04-20 10:07:03
    于是,先修改hive中的字段类型(***.****:为名称): alter table ***.**** change column col1 col11 string cascade; alter table ***.**** change column col11 col1 string cascade; 修改click
  • 《MysqL必读MysqL 增加修改字段类型及删除字段类型》要点:本文介绍了MysqL必读MysqL 增加修改字段类型及删除字段类型,希望对您有用。如果有疑问,可以联系我们。添加)增加一个新列alter table t2 add d timestamp;...
  • 【mysql】 数据表修改字段的数据类型1、背景2、修改字段的数据类型 1、背景 当数据创建之后,发现数据表字段的数据类型不合适,我们可以立即删除后重新创建; 但是一旦存上大量数据之后,我们更希望直接修改数据...
  • MySQL JSON类型字段操作

    2020-12-14 12:28:32
    1、Java 中动态扩展字段,会导致数据库被锁,MySQL 5.7.8版本之前,因为MySQL不能直接操作JSON类型数据,可以将一个字段设定成varchar类型,里面存放JSON格式数据,这样需要扩展字段时,不需要修改表结构;...
  • MySQL 中,ALTER TABLE语句可以改变原有的结构,例如增加或删减列、更改原有列类型、重新命名列或等。其语法格式如下:ALTER TABLE [修改选项]修改选项的语法格式如下:{ ADD COLUMN | CHANGE COLUMN | ALTER...
  • mysql修改字段类型有:1、添加字段【alter table table1(表名)add No_id(字段名)】;2、修改字段类型【t1(表名) alter column a(字段名)】;3、删除某的字段【drop 'cpid'】。mysql修改字段类型有:1、mysql修改...
  • SqlServer 通用修改字段类型(多

    千次阅读 2022-04-17 19:57:53
    sqlserver全表修改字段类型
  • 表名,和字段名的语句SQL Server 触发器 的特定字段更新时,触发Update触发器sqlserver对字段的添加修改删除、以及字段的说明SQL Server中检查字段的值是否为数字的方法SQL SERVER的字段类型说明SQL Server 中调整...
  • MySQL存储过程,一键批量修改一个内的多个列(字段类型。例如从int转换成varchar
  • 后期的迭代中,我们需要不断对表结构进行调整,尤其是对字段修改。 下面,介绍一下操作相关的DDL语句: MySQL常见的数据类型 1)常用的数据类型: 2) 详细的数据类型(了解即可) 注意:MySQL中的 char类型...
  • 一,altertable表名modify字段名字段类型(字段长度);如果不好使,就是用第二种方法:二,-- Create tablecreate table TABLE1(col1 number(9),col2 char(20));//尝试修改ALTER TABLE TABLE1 MODIFY COL1 NUMBER(10);...
  • mysql 修改字段类型

    千次阅读 2022-01-19 10:45:33
    修改字段类型: alter table 表名 modify column 字段名 类型。 --如 alter table province_quality modify column quality float(8,2); mysql> describe province_quality ; +----------+--------------+------+...
  • hive修改字段类型

    千次阅读 2020-12-30 14:50:40
    alter table 表名 change column 原字段名 现字段名 字段类型
  • ①:更改字段类型长度ALTER TABLE 表名ALTER COLUMN 字段名 类型的长度–varchar(50)例:把城市的城市字段原来长度为20改为30ALTER TABLE cityALTER COLUMN cname varchar(30)ALTER TABLE #tempALTER COLUMN bmmc ...
  • Postgre SQL修改字段类型语法,自测通过
  • /** ORACLE更改字段类型 **/ -- 1.的原字段重命名 ALTER TABLE BDGH_INST.BZ_GHSJYQ RENAME JZGDSX TO JZGDSX_TEMP; ALTER TABLE BDGH_INST.BZ_GHSJYQ RENAME JZGDXX TO JZGDXX_TEMP; -- 2.添加新字段,字段名与...
  • 数据库表里有数据如何修改字段类型 1、备份数据 create table ST_DATA_IMPORT_BAK AS SELECT * FROM ST_DATA_IMPORT; 2、删除数据 delete from ST_DATA_IMPORT; 3、修改目标结构 ALTER TABLE ST_DATA_IMPORT...
  • Oracle 修改字段类型

    千次阅读 2021-03-09 17:04:05
    修改 Oracle 字段类型该字段存在值的情况下,会提示:ORA-01439:要更改数据类型,则要修改的列必须为空 这时就需要区分情况处理。 数据量比较小的时候,可以直接操作目标。 重命名字段名,添加新字段,...
  • Clickhouse修改字段类型

    万次阅读 2020-06-27 21:38:54
    查询中,指定一个或多个逗号分隔操作的列表。 每个操作都是对列的操作。 支持以下操作: ADD COLUMN— Adds a new column to the table. DROP COLUMN— Deletes the column. CLEAR COLUMN— Resets colum...
  • SQL语句增加字段修改字段修改类型修改默认值

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 876,349
精华内容 350,539
关键字:

在哪修改表的字段类型