我在Hive中有多个View。大多数视图是使用模式select *
而非特定列名创建的。从基表中删除列时,所有这些视图开始引发missing column
错误。我什至无法做select * from myview
。
看来,尽管我的原始视图创建文本为select *
,但Hive似乎已将其转换为扩展格式,例如select col1, col2, col3 etc
。
是否有应启用的解决方法或设置,以便更改无需更改即可反映在视图中。
答案 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。