我有这个模式(通过ddl为表和视图提供):
hive> create table t_realtime(cust_id int, name string, status string, active_flag int);
hive> create table t_hdfs(cust_id int, name string, status string, active_flag int);
hive> create view t_inactive as select * from t_hdfs where active_flag=0;
hive> create view t_view as select * from t_realtime union all select * from t_inactive;
如果我发出如下查询:
hive> select * from t_view where active_flag = 1;
此查询不应访问 t_inactive
查看或 t_hdfs
因为 t_inactive
它自己也有 active_flag = 0
并且查询 predicate active_flag = 1
. 但是,默认情况下,它不会消除 t_inactive
这是工会观点的一部分。
对于这样的配置单元查询,是否还有其他方法可以实现这一点?可能是一些配置单元优化器参数或提示?
1条答案
按热度按时间afdcj2ne1#
这是测试昨天的主线(在d68630b6ed25884a76030a9073cd864032ab85c2)。如你所见,它只扫描
t_realtime
并向下推 predicateactive_flag = 1
. 无论您的特定安装是否会这样做,这取决于您使用的版本。这个主题是积极发展,不仅在Hive,而且方解石(Hive使用)。