Hadoop 配置单元alter table change列名称给出';空';到重命名的列

Hadoop 配置单元alter table change列名称给出';空';到重命名的列,hadoop,hive,bigdata,hiveql,parquet,Hadoop,Hive,Bigdata,Hiveql,Parquet,我试图将表中的现有列重命名为新列。但是在名称更改之后,新列只给我“NULL”值 拼花地板中桌子的存储格式 例如 “user”是字符串数据类型的“Test”表中的一列。插入值为“John”的示例记录 结果:约翰 我已将“user”重命名为“user\u name”,但未更改任何数据类型 结果:空 请让我知道如何解决此问题 在这种情况下,MSCK Repair table命令是否有用 是否需要重新加载此表以修复此问题 问候,, Adarsh K S您可以做的是添加新字段,执行一次插入覆盖,然后删除旧

我试图将表中的现有列重命名为新列。但是在名称更改之后,新列只给我“NULL”值

拼花地板中桌子的存储格式

例如

“user”是字符串数据类型的“Test”表中的一列。插入值为“John”的示例记录

结果:约翰

我已将“user”重命名为“user\u name”,但未更改任何数据类型

结果:空

请让我知道如何解决此问题

在这种情况下,MSCK Repair table命令是否有用

是否需要重新加载此表以修复此问题

问候,,
Adarsh K S

您可以做的是添加新字段,执行一次插入覆盖,然后删除旧字段。 大概是这样的:

ALTER TABLE temp.Test ADD COLUMNS (user_new string) CASCADE;

您现有的拼花地板文件具有在写入时定义的列名。通常来说,许多ALTER TABLE命令只适用于未来的分区和/或未来的数据文件。有时,您还可以将应用程序强制到现有分区。但在您的情况下,这不适用。如果您只是想更改显示的名称,您可以执行
选择'user'作为用户名…
ALTER TABLE Test CHANGE user user_name String;

Select user_name from Test;
ALTER TABLE temp.Test ADD COLUMNS (user_new string) CASCADE;
insert overwrite table temp.Test
select 
      user_a,
      a,
      b,
      c,
      user_a as user_new
from temp.test;
ALTER TABLE temp.test  REPLACE COLUMNS(user_new string, a string, b string, c string );