Hive 视图未反映基础 table 更改

Hive views not reflecting base table changes

我在 Hive 中有多个视图。大多数视图是使用模式 select * 而不是特定的列名称创建的。当从基础 table 中删除一列时,所有这些视图都开始抛出 missing column 错误。我什至不能做 select * from myview.

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

是否有我应该启用的解决方法或设置,以便更改反映在视图中而无需重新创建它们。

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

在SQL:200n中,视图定义应该在创建时被冻结,因此如果视图定义为select * from t,其中t是一个table 有两列 a 和 b,然后稍后从视图请求 select * 应该 return 只是列 a 和 b,即使稍后将新列 c 添加到 table.大多数 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.