-
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 增加修改字段类型及删除字段类型
2020-09-10 14:00:29本节主要介绍了mysql如何增加修改字段类型及删除字段类型,需要的朋友可以参考下 -
SQLServer 2008 批量修改字段类型.sql
2019-09-15 10:36:38SQL Server 2008 批量修改字段类型,查询出所有需要修改的字段,然后修改 -
详解Oracle修改字段类型方法总结
2020-12-16 14:07:00最近学习了Oracle修改字段类型方法,留做记录。 有一个表名为tb,字段段名为name,数据类型nchar(20)。 1、假设字段数据为空,则不管改为什么字段类型,可以直接执行: alter table tb modify (name nvarchar2(20... -
如何在impala中修改parquet表的字段类型以及修复过程
2019-11-22 18:22:17因为前期设计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语句,介绍如何修改字段类型,希望对大家有所帮助。
在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:11Oracle的表中已存在了数据,这时再来修改表的字段类型就无法修改。例如, 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 增加修改字段类型及删除字段类型
2021-02-07 05:54:47《MysqL必读MysqL 增加修改字段类型及删除字段类型》要点:本文介绍了MysqL必读MysqL 增加修改字段类型及删除字段类型,希望对您有用。如果有疑问,可以联系我们。添加)增加一个新列alter table t2 add d timestamp;... -
【mysql】 数据表修改字段的数据类型
2021-10-16 12:04:16【mysql】 数据表修改字段的数据类型1、背景2、修改字段的数据类型 1、背景 当数据表创建之后,发现数据表字段的数据类型不合适,我们可以立即删除后重新创建; 但是一旦存上大量数据之后,我们更希望直接修改数据表... -
MySQL JSON类型字段操作
2020-12-14 12:28:321、Java 中动态扩展字段,会导致数据库表被锁,在MySQL 5.7.8版本之前,因为MySQL不能直接操作JSON类型数据,可以将一个字段设定成varchar类型,里面存放JSON格式数据,这样在需要扩展字段时,不需要修改表结构;... -
mysql怎么更改表中某字段的数据类型?
2021-01-27 05:11:22在 MySQL 中,ALTER TABLE语句可以改变原有表的结构,例如增加或删减列、更改原有列类型、重新命名列或表等。其语法格式如下:ALTER TABLE [修改选项]修改选项的语法格式如下:{ ADD COLUMN | CHANGE COLUMN | ALTER... -
mysql修改字段类型有哪些?
2021-02-04 12:43:30mysql修改字段类型有:1、添加字段【alter table table1(表名)add No_id(字段名)】;2、修改字段类型【t1(表名) alter column a(字段名)】;3、删除某表的字段【drop 'cpid'】。mysql修改字段类型有:1、mysql修改... -
SqlServer 通用修改字段类型(多表)
2022-04-17 19:57:53sqlserver全表修改字段类型 -
解决SQL SERVER 2008数据库表中修改字段后不能保存
2020-12-15 12:15:34表名,和字段名的语句SQL Server 触发器 表的特定字段更新时,触发Update触发器sqlserver对字段的添加修改删除、以及字段的说明SQL Server中检查字段的值是否为数字的方法SQL SERVER的字段类型说明SQL Server 中调整... -
mysql批量修改(字段)列类型
2018-03-24 09:38:51MySQL存储过程,一键批量修改一个表内的多个列(字段)类型。例如从int转换成varchar -
Mysql中DDL操作表,修改字段类型、长度以及添加删除列等
2021-05-12 17:25:34在后期的迭代中,我们需要不断对表结构进行调整,尤其是对字段的修改。 下面,介绍一下操作表相关的DDL语句: MySQL常见的数据类型 1)常用的数据类型: 2) 详细的数据类型(了解即可) 注意:MySQL中的 char类型... -
oracle数据库表的已经有数据,想修改某个字段的类型,如何修改
2021-05-05 04:23:30一,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:40alter table 表名 change column 原字段名 现字段名 字段类型 -
(SQL)修改表结构[字段类型]、表字段长度,
2021-02-02 03:37:37①:更改字段类型长度ALTER TABLE 表名ALTER COLUMN 字段名 类型的长度–varchar(50)例:把城市表的城市字段原来长度为20改为30ALTER TABLE cityALTER COLUMN cname varchar(30)ALTER TABLE #tempALTER COLUMN bmmc ... -
Postgre SQL修改字段类型语法
2022-04-11 14:54:46Postgre SQL修改字段类型语法,自测通过 -
oracle更改有数据字段类型
2022-04-25 09:23:49/** 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.添加新字段,字段名与... -
数据库表里有数据如何修改字段类型
2020-04-24 17:44:16数据库表里有数据如何修改字段类型 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语句增加字段、修改字段、修改类型、修改默认值
2016-01-26 01:44:33SQL语句增加字段、修改字段、修改类型、修改默认值