apache-hive / 3.1.1 / reference / UpdatableViews.html

UpdatableViews

Proposal

在以下情况下,Hive 将考虑更新视图:

  • 该视图仅在 FROM 子句中引用一个基本表或可更新视图,而没有 WHERE 子句。

  • 视图中的每一列都是基础表/可更新视图中的一列,没有重复的基础列。

  • 视图必须具有与基础表/可更新视图相同的分区列。

插入视图时:

  • 如果视图未指定所有基础列,则将为每个未指定的列插入 NULL。

Given

create table t1 (id int, key string, value string) partitioned by (ds string, hr string);

create view v partitioned on (ds, hr) as select id, value, ds, hr from t1;

我们可以插入 v,其中 NULL 将用作键。

Notes:

  • 我们是否应该尝试支持像这样的视图(创建在(ds,hr)上划分的视图 v 作为选择 id,值,ds,其中 ds ='2011-01-01'和 hr = '12')进行更新,我们可以推断出 ds 和 hr?

  • 对于非动态分区,我们是否要求分区位于可更新视图链中的每个视图上?如果您没有对所有视图的写权限,这似乎很麻烦?

  • 当我们为视图指定动态分区时,我们是否在可更新视图链中的每个视图上创建分区?如果不这样做,则可能会有奇怪的行为,其中 SHOW PARTITIONS 可能不会在视图上显示任何内容,但是我们可以将其插入视图的此类分区中。如果这样做,则在视图上放置分区实际上对数据没有任何作用。

有关视图的一般信息,请参见Hive Views