配置单元视图未反映基本表更改

时间:2018-10-29 14:33:26

标签: hive hiveql ambari

我在Hive中有多个View。大多数视图是使用模式select *而非特定列名创建的。从基表中删除列时,所有这些视图开始引发missing column错误。我什至无法做select * from myview

看来,尽管我的原始视图创建文本为select *,但Hive似乎已将其转换为扩展格式,例如select col1, col2, col3 etc

是否有应启用的解决方法或设置,以便更改无需更改即可反映在视图中。

1 个答案:

答案 0 :(得分:1)

Hive正在使用存储的视图定义。

在SQL:200n中,视图定义应该在创建时冻结,因此,如果视图定义为select * from t,其中t是具有两列a和b的表,则稍后从视图中选择*的请求应仅返回列a和b,即使稍后将新列c添加到表中也是如此。大多数DBMS产品均可正确实现此功能。在此设计文档中查看更多详细信息:Stored View Definition

因此,您需要执行ALTER VIEW [db_name.]view_name AS select_statement;命令以反映DDL更改。 Alter View As Select更改视图的定义,该视图必须存在。语法与CREATE VIEW相似,效果与CREATE OR REPLACE VIEW相同。在此处查看更多详细信息:Alter View