首页 > 解决方案 > 插入 Hive 中的视图

问题描述

我们可以插入 Hive 中的视图吗?我过去曾使用 Oracle 和 Teradata 完成此操作。但是,似乎在 Hive 中不起作用。

create table t2 (id int, key string, value string, ds string, hr string);

create view v2 as select id, key, value, ds, hr from t2;

insert into v2 values (1,'key1','value1','ds1','hr1')

***Error while compiling statement: FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: Unable to determine if null is encrypted: java.lang.NullPointerException***

这些似乎是某种更新支持。但是,我在插入视图时看不到任何东西。 https://cwiki.apache.org/confluence/display/Hive/UpdatableViews

感谢您的反馈。说得通。需要此功能的原因是,我们使用的 ETL 工具在处理高精度小数(>15 位)时存在问题。如果对象(在这种情况下为表-> 列)在工具中表示为字符串,我们没有问题。所以,我想我会用字符串数据类型定义一堆视图,然后在工具中使用它们。但是,不能在配置单元中插入以查看。所以,我可能需要考虑其他事情。以前用 oracle 和 teradata 做过这种方式。

我们可以让两个不同结构的表指向相同的底层 hdfs 内容吗?可能不会工作,因为存储模式的镶木地板存储。对不起,不是hadoop专家。

非常感谢您的时间。

标签: viewhive

解决方案


无法在 Hive 视图中插入数据,Hive 视图只是 Hive 表的投影(您可以将其视为预先保存的查询)。来自 Hive 文档

请注意,视图是没有关联存储的纯逻辑对象。(Hive 目前不支持物化视图。)当查询引用视图时,会评估视图的定义以生成一组行以供查询进一步处理。(这是一个概念性的描述;事实上,作为查询优化的一部分,Hive 可以将视图的定义与查询的定义结合起来,例如将过滤器从查询推送到视图中。)


推荐阅读