hive - 列“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
查询都在工作。
- 使用 ALTER 命令向新创建的表添加其他字段,然后执行以下操作
MSCK REPAIR TABLE TABLE NAME;
在黑斑羚:
REFRESH TABLE TABLE NAME;
INVALIDATE METADATA TABLE NAME;
这次在 Hive 中选择查询有效,但在 Impala 中出现上述错误。
有人可以指导我为什么会发生这种情况以及如何解决这个问题。
Impala Shell v2.12.0-cdh5.16.2
解决方案
推荐阅读
- postgresql - PostgreSQL 读取不同事务的提交
- angular - 拖动后如何保存渲染的DOM块?
- excel - DataSource.Error OLE DB:数据库已被机器 X 上的用户“管理员”置于一种状态,阻止它被打开或锁定
- azure-sql-database - 从 SqlDataReader 读取缓慢
- visual-studio-code - Pug 在 cmd 中工作,但在 vs code 终端中无法识别
- firebase - 我们如何在firebase中获取用户名?
- amazon - 亚马逊作者的 ASIN
- java - 根据目标值拆分值列表
- algorithm - 围绕边缘对齐多边形
- android - 隐藏下拉菜单的drawable