【问题标题】:Hive views not reflecting base table changesHive 视图不反映基表更改
【发布时间】:2019-04-02 12:25:53
【问题描述】:

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

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

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

【问题讨论】:

    标签: hive hiveql ambari hiveddl


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 2016-09-26
      • 1970-01-01
      • 2015-04-20
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多