· 在默认情况下,物化视图一旦变得过于陈旧,系统将不会使用它来进行自动查询重写。然而,在某些场景下,即便数据有些过时,也仍然可接受。例如,如果物化视图基于的是非事务性表,这时无法验证物化视图的内容是否最新,但用户可能仍希望利用物化视图进行自动查询重写。
· 为了应对这类情况,可以设定定期的重建机制,比如每 5 分钟重新创建一次物化视图。此外,在Hive中,可以通过设置 hive.materializedview.rewriting.time.window 配置参数来定义物化视图数据的更新频率和时间窗口,具体实现内容见代码。
printf("hello world!");-- 定义执行重建
SET hive.materializedview.rewriting.time.window=10min;
· 参数值也可以被具体的物化视图覆盖,只需要在创建物化视图时将其设置为报表属性即可。
物化视图相关设置参数具体内容见代码。
<property>
<name>hive.materializedview.rewriting</name>
<value>true</value>
<description>
是否尝试使用已启用重写的物化视图重写查询
</description>
</property>
<property>
<name>hive.materializedview.rewriting.strategy</name>
<value>heuristic</value>
<description>
两种策略:[heuristic, costbased].
heuristic: 如果重写生成了物化视图,则始终尝试使用物化视图选择计划,
在包含物化视图的可能计划中选择成本较低的计划
costbased: 完全基于成本的策略,始终使用成本较低的计划,
独立于是否使用物化视图
</description>
</property>
<property>
<name>hive.materializedview.rewriting.time.window</name>
<value>0min</value>
<description>
定时执行时间
</description>
</property>
<property>
<name>hive.materializedview.rewriting.incremental</name>
<value>false</value>
<description>
是否尝试基于过时的物化和表的当前内容,
默认值为 true,等于启用增量为物化重建
</description>
</property>
<property>
<name>hive.materializedview.rebuild.incremental</name>
<value>true</value>
<description>
考虑对物化视图实施增量更新,该过程通过调整物化视图的原始内容来反映源表的最新变更,而非进行全
面的重建。这种增量更新策略依据物化视图的代数特性和增量重写原则来优化更新操作
</description>
</property>
<property>
<name>hive.materializedview.fileformat</name>
<value>ORC</value>
<description>
可选格式:[none, textfile, sequencefile, rcfile, orc]。
</description>
</property>
<property>
<name>hive.materializedview.serde</name>
<value>org.apache.hadoop.hive.ql.io.orc.OrcSerde</value>
<description>
默认 SerDe 用于物化视图
</description>
</property>
· 本节内容就到此结束了,主要讲述了 Hive 视图的相关用法,希望对大家有帮助哦!想要深入学习Hive 知识的童鞋们,可以关注下面这本书哦!
本文摘自《深入理解Hive:从基础到高阶:视频教学版》,获出版社和作者授权发布。