我在 Hive 中有很多 Views。大多数视图是使用模式select *
而不是特定的列名创建的。当从基表中删除一列时,所有这些视图都开始抛出missing column
错误。我什至不能做一个select * from myview
。
看来,尽管我最初的视图创建文本是select *
,Hive 似乎已将它们转换为扩展格式,例如select col1, col2, col3 etc
.
是否有我应该启用的解决方法或设置,以便更改反映在视图中而无需重新创建它们。
Hive 正在使用存储的视图定义。
在 SQL:200n 中,视图定义应该在创建时被冻结,因此如果视图定义为 select * from t,其中 t 是具有两列 a 和 b 的表,则稍后请求选择* 从视图中应该只返回列 a 和 b,即使稍后将新列 c 添加到表中。大多数 DBMS 产品都正确实现了这一点。在此设计文档中查看更多详细信息:存储视图定义
因此,您需要执行ALTER VIEW [db_name.]view_name AS select_statement;
命令来反映 DDL 更改。Alter View As Select
更改必须存在的视图的定义。语法与 for 类似,CREATE VIEW
效果与 for 相同CREATE OR REPLACE VIEW
。在此处查看更多详细信息:更改视图。