Hive 配置单元不会更改拼花地板模式

Hive 配置单元不会更改拼花地板模式,hive,parquet,Hive,Parquet,我对ALTERTABLE有一个问题,它改变了表格模式,但没有改变拼花地板模式 例如,我有一个带有以下列的拼花地板桌子: column1(string) column2(string) column3(string) column4(string) column5(bigint) 现在,我尝试使用 ALTER TABLE name_table DROP COLUMN column3; 通过描述表,我可以看到第2列不再存在 现在我尝试执行select*from table,但收到

我对ALTERTABLE有一个问题,它改变了表格模式,但没有改变拼花地板模式

例如,我有一个带有以下列的拼花地板桌子:

column1(string)    column2(string) 
column3(string)    column4(string)
column5(bigint)
现在,我尝试使用

ALTER TABLE name_table DROP COLUMN column3; 
通过描述表,我可以看到第2列不再存在

现在我尝试执行select*from table,但收到如下错误:

data.0.parq'的类型与column4列的表架构不兼容。应为类型:INT64。实际类型:字节数组

已删除列的值仍存在于拼花地板文件中,该文件有5列,而不是表模式中的4列


这是一只虫子?如何使用配置单元更改拼花地板文件的模式?

这不是错误。当您删除列时,这只会更新配置单元元存储中的定义,这只是关于表的信息。HDFS上的底层文件保持不变。因为拼花地板元数据嵌入到文件中,所以他们不知道元数据发生了什么变化。 因此您看到了这个问题。

解决方案已被描述。如果要向拼花地板表中添加列并与impala和hive兼容,则需要在末尾添加列


如果更改表、更改列名或删除列,则该表将不再与impala兼容。

在向配置单元表添加列后,我遇到了相同的错误

解决方案是在每个会话中设置以下查询选项

set PARQUET_FALLBACK_SCHEMA_RESOLUTION=name;
如果您使用的是Cloudera发行版,请在Cloudera Manager=>Impala配置=>Impala守护程序查询选项高级配置代码段安全阀中永久设置它


你确定你使用的是蜂巢而不是黑斑羚吗?你只是再次描述问题,没有提供解决方案。我不是。问题是这是一个bug?如何使用配置单元更改拼花地板文件的架构?。我回答说这不是一个bug。这是设计的,从逻辑上讲,没有解决方案。更改文件中元数据的唯一方法是创建新文件。确实有一种方法可以更改拼花地板模式。请参阅我的回复上的链接页面。
set config value as PARQUET_FALLBACK_SCHEMA_RESOLUTION=name