目前,我尝试在hive中联合几个表。在我实现这一点之后,我发现某些列类型不合适。我认为有些应该是float
但有些它会成为string
。然后我运行了alter命令:alter table table_name change column_name column_name float;
它返回了错误消息:
失败:执行错误,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1。无法更改表格。以下列的类型与各自位置的现有列不兼容
我认为这意味着hive不支持将字符串转换为float,如table所示。但我发现我可以在同一列上进行投射并得到想要的结果。这让我很困惑为什么alter和cast之间会有不同的结果。它背后的逻辑是什么? THX。
答案 0 :(得分:1)
好像你错过了CHANGE关键字。
alter table table_name CHANGE column_name column_name_new float;
演示:
hive> create table t(a string);
OK
Time taken: 0.069 seconds
hive> alter table t change a a_new float;
OK
Time taken: 0.158 seconds
hive> describe formatted t;
OK
# col_name data_type comment
a_new float