2

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

看来,尽管我最初的视图创建文本是select *,Hive 似乎已将它们转换为扩展格式,例如select col1, col2, col3 etc.

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

4

1 回答 1

1

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。在此处查看更多详细信息:更改视图

于 2018-10-30T05:54:38.850 回答