【问题标题】:How to create static views in Hive?如何在 Hive 中创建静态视图?
【发布时间】:2018-04-12 10:32:50
【问题描述】:

如何在 Hive 中创建静态视图?就像我在下面创建视图一样,

CREATE OR REPLACE VIEW V_TMP AS 
SELECT 1 AS LEVEL_ID,'URBAN' AS ITEM_CODE
UNION ALL
SELECT 1 AS LEVEL_ID,'RURAL' AS ITEM_CODE
UNION ALL
SELECT 9999 AS LEVEL_ID,'ALL' AS ITEM_CODE;

它抛出以下错误:

编译语句时出错:FAILED: SemanticException No valid 权限 所需权限(表)在输入中不可用 权限 所需权限:

有人可以帮忙吗?

【问题讨论】:

    标签: hadoop view hive bigdata hiveql


    【解决方案1】:

    给定的查询将不起作用,因为它没有从任何表中获取数据。在 hive 中,在创建静态视图时,您仍然需要从表中获取数据。如果它是 oracle,您可以直接从虚拟表中获取。

    因此,您可以通过 2 种方法来创建静态视图。

    1. 将其指向任何现有表并使用 where 1=1 条件。

    2. 创建一个虚拟表并使用如下所示的虚拟表选择它。

      创建虚拟表(id int)

      插入虚拟对象(1)

      创建或替换视图 V_TMP1(LEVEL_ID,ITEM_CODE)AS SELECT 1 AS LEVEL_ID,'URBAN' AS ITEM_CODE from dummy 联合所有 SELECT 1 AS LEVEL_ID,'RURAL' AS ITEM_CODE from dummy 联合所有 SELECT 9999 AS LEVEL_ID,'ALL' AS ITEM_CODE from dummy;

    【讨论】:

      【解决方案2】:

      请检查您是否在 hive 仓库中拥有必要的权限,并尝试使用任何其他数据库来创建您的视图。

      有时,默认数据库并未授予所有用户的权限。

      如果您使用的是 Kerberos 集群,则需要检查 Hive 用户是否具有必要的哨兵角色。

      否则:-

      CREATE OR REPLACE VIEW V_TMP1 (LEVEL_ID , ITEM_CODE  ) AS 
      SELECT 1 AS LEVEL_ID,'URBAN' AS ITEM_CODE
      UNION ALL
      SELECT 1 AS LEVEL_ID,'RURAL' AS ITEM_CODE
      UNION ALL
      SELECT 9999 AS LEVEL_ID,'ALL' AS ITEM_CODE;
      

      【讨论】:

      • 我可以创建其他视图,例如 CREATE OR REPLACE VIEW TMP AS SELECT * FROM TABLE1;但无法创建静态视图。
      • 看起来有点奇怪,我在我的虚拟机中执行了你的查询,它运行没有任何问题。
      • 我已经编辑了我的答案,检查它是否有效。
      • 不走运,您的查询也没有执行!
      猜你喜欢
      • 2014-09-22
      • 2019-11-01
      • 2011-07-03
      • 2015-05-02
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多