如何在 Hive 中创建静态视图?
Posted
技术标签:
【中文标题】如何在 Hive 中创建静态视图?【英文标题】:How to create static views in Hive? 【发布时间】:2018-04-12 10:32:50 【问题描述】:就像我在下面创建视图一样,
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 权限 所需权限(表)在输入中不可用 权限 所需权限:
有人可以帮忙吗?
【问题讨论】:
【参考方案1】:给定的查询将不起作用,因为它没有从任何表中获取数据。在 hive 中,在创建静态视图时,您仍然需要从表中获取数据。如果它是 oracle,您可以直接从虚拟表中获取。
因此,您可以通过 2 种方法来创建静态视图。
将其指向任何现有表并使用 where 1=1 条件。
创建一个虚拟表并使用如下所示的虚拟表选择它。
创建虚拟表(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;但无法创建静态视图。 看起来有点奇怪,我在我的虚拟机中执行了你的查询,它运行没有任何问题。 我已经编辑了我的答案,检查它是否有效。 不走运,您的查询也没有执行!以上是关于如何在 Hive 中创建静态视图?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 开发 - 如何使用自定义 Table View Controller 显示在 Interface Builder 中创建的静态单元格?