列“ ex:x的类型为String”的Parquet模式不兼容列类型:STRING,Parquet模式

时间:2020-05-11 10:03:30

标签: hive impala

我有一个现有的外部表,例如YYYYYY,其中包含n个列,并且该表每天都以分区列作为extract_date加载。

我们收到了企业的请求,要求在现有表格中再添加几列。为了实现这一点,我们做了以下事情。

DROP existing partitions from Hive

alter table xxxx.yyyyyy add columns (
     `c10` string COMMENT '',
     `b` string COMMENT '',
     `c11` string COMMENT '',
     `c12` string COMMENT '',
     `c13` string COMMENT '',
     `c14` string COMMENT '',
     `c15` string COMMENT '') CASCADE;

alter table xxxx.yyyyyyy change `c8` `c8` string COMMENT '' after `c7` CASCADE;

完成上述两个步骤之后,我去了Hive,做了MSCK REPAIR TABLE xxxx.yyyyyy;

添加了分区(有2018年的分区)以及我的新字段。

在进行更改之前,我能够从Impala和Hive都查询数据,但是在执行ALTER命令之后,出现以下错误。

> select * from xxxx.yyyyyyy where extract_date like '2019%';
Query: select * from XXXXX.YYYYYYY where extract_date like '2019%'
Query submitted at: 2020-05-09 11:57:10 (Coordinator: ' xxxx.yyyyyyy .c9'. Column type: STRING, Parquet schema:
optional fixed_len_byte_array a_auth [i:12 d:1 r:0]

在Hive中,我能够毫无问题地浏览数据。所以我只有在Impala中有问题。

故障排除步骤:

创建了没有附加列的新表,并将外部路径指向新表,并将先前创建的分区复制到新路径。

MSCK REPAIR TABLE TABLE NAME;

在Impala和Hive中,select查询都可以正常工作。

  1. 使用ALTER命令向新创建的表中添加其他字段,然后执行以下操作

MSCK REPAIR TABLE TABLE NAME;

在Impala中: REFRESH TABLE TABLE NAME; INVALIDATE METADATA TABLE NAME;

这一次在Hive中进行选择查询,但在Impala中出现了上述错误。

有人可以指导我为什么会这样以及如何解决此问题。

Impala Shell v2.12.0-cdh5.16.2

0 个答案:

没有答案