当前位置: 首页 > 知识库问答 >
问题:

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

刘弘济
2023-03-14

我对alter table有一个问题,它改变了表模式,而不是parquet模式。

例如,我有一个<code>PARQUET<code>表,其中包含以下列:

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 列的 Parquet 文件中(作为表架构)

这是窃听器?如何使用Hive更改Parquet文件的模式?

共有3个答案

仲高超
2023-03-14

在向hive表中添加一列后,我出现了同样的错误。

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

set PARQUET_FALLBACK_SCHEMA_RESOLUTION=name;

如果您使用的是Cloudera发行版,请在< code>Cloudera Manager =中永久设置它

set config value as PARQUET_FALLBACK_SCHEMA_RESOLUTION=name
巫新知
2023-03-14

这里描述了解决方案。如果您想在镶木地板表中添加列,并与impala和hive兼容,则需要在末尾添加列。

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

滕胜涝
2023-03-14

这不是bug。当您删除列时,这只是更新Hive Metastore中的定义,它只是关于表的信息。HDFS的基本档案保持不变。由于镶木地板元数据嵌入在文件中,他们不知道元数据发生了什么变化。因此你看到了这个问题。

 类似资料: