首页 > 解决方案 > 列“ex:x 属于字符串类型”的 Parquet 模式不兼容 列类型:STRING、Parquet 模式

问题描述

我有一个名为 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;

完成上述2个步骤后,我去了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;

在黑斑羚: REFRESH TABLE TABLE NAME; INVALIDATE METADATA TABLE NAME;

这次在 Hive 中选择查询有效,但在 Impala 中出现上述错误。

有人可以指导我为什么会发生这种情况以及如何解决这个问题。

Impala Shell v2.12.0-cdh5.16.2

标签: hiveimpala

解决方案


推荐阅读