我对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文件的模式?
在向hive表中添加一列后,我出现了同样的错误。
解决方案是在每个会话中设置以下查询选项:
set PARQUET_FALLBACK_SCHEMA_RESOLUTION=name;
如果您使用的是Cloudera发行版,请在< code>Cloudera Manager =中永久设置它
set config value as PARQUET_FALLBACK_SCHEMA_RESOLUTION=name
这里描述了解决方案。如果您想在镶木地板表中添加列,并与impala和hive兼容,则需要在末尾添加列。
如果更改表并更改列名或删除列,则该表将不再与 impala 兼容。
这不是bug。当您删除列时,这只是更新Hive Metastore中的定义,它只是关于表的信息。HDFS的基本档案保持不变。由于镶木地板元数据嵌入在文件中,他们不知道元数据发生了什么变化。因此你看到了这个问题。
先声明一下,这不是Hadoop的生产环境。这是一个我们测试工作流的单节点环境
我正在使用Spark生成拼花文件(通过分区,使用Snappy压缩),并将它们存储在HDFS位置。 拼花数据文件存储在下 然后为其创建配置单元表,如下所示:
如有任何建议/暗示,不胜感激。
我们需要将表列数据类型从string更改为Date。当我试着做的时候,我得到了下面的错误。你能帮帮我吗。
我在配置单元中有orc表我想从这个表中删除列 但我遇到以下异常 执行配置单元查询时出错:OK失败:ParseException行1:35输入“USER_ID1”不匹配,在drop PARTITION语句中的“drop”附近需要分区 有谁能帮助我或提供任何想法来做这件事吗?注意,我正在