hive分区对应hadoop_hive修改分区类型

但修改分区字段类型时会报错如下:

CREATE EXTERNAL TABLE tmp.tmp_table_name(col_name string)

PARTITIONED BY (dt string COMMENT 'dt',part_col_name string COMMENT 'part_col_name')

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

STORED AS ORC

TBLPROPERTIES ('orc.compress'='SNAPPY');

hive> alter table tmp.tmp_table_name change part_col_name part_col_name int comment'test';

AILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Invalid column reference part_col_name

有两种修改思路:

常规的:创建一张调整完的新表,然后将数据insert到新表

另一种:

1. 将待修改的表切换成外部表

ALTER TABLE tmp.tmp_table_name SET TBLPROPERTIES ('EXTERNAL'='true');

2. 删除该外部表,此时数据文件依然在

drop table tmp.tmp_table_name;

3. 重建该表,字段类型完成调整

CREATE EXTERNAL TABLE `tmp.tmp_table_name`(`col_name` string)

PARTITIONED BY ( `dt` string COMMENT 'dt', `part_col_name` int COMMENT 'part_col_name')

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

STORED AS ORC

TBLPROPERTIES ('orc.compress'='SNAPPY');

4. 重建分区

msck repair table tmp.tmp_table_name;

第二种方式一般来说是没有问题的,但是也有特殊情况会出现报错:

Failed with exception java.io.IOException:java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.io.IntWritable

会导致无法正常查询出数据

这里描述一个例子,原表曾调整过表结构, ALTER TABLE table_name CHANGE col_name col_name1 INT; 比如将string调整为int,这样会导致对应的列的数据为null,但是如果将该表数据重建后,会因这列数据导致所有数据无法查询出来,此时重建该表时需要将该列调整为string,然后再用alter改为int才和原表一样,所以使用第二种方式虽然方便,但也是会存在风险的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值