gpt4 book ai didi

sql - Hive Optimizer 在优化 View 查询时是否考虑 View 定义?

转载 作者:可可西里 更新时间:2023-11-01 16:39:17 26 4
gpt4 key购买 nike

我有这个架构(通过 DDL 为表和 View 提供):

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 View 或t_hdfs,因为t_inactive 的 View 定义本身具有active_flag = 0 并且查询谓词有 active_flag = 1。但是,默认情况下,它不会消除此联合 View 的 t_inactive 部分。

对于这样的配置单元查询,有没有办法实现这个?也许是一些配置单元优化器参数或提示?

最佳答案

hive> explain extended select * from t_view where active_flag = 1;
OK
STAGE DEPENDENCIES:
Stage-0 is a root stage

STAGE PLANS:
Stage: Stage-0
Fetch Operator
limit: -1
Processor Tree:
TableScan
alias: t_realtime
properties:
insideView TRUE
GatherStats: false
Filter Operator
isSamplingPred: false
predicate: (active_flag = 1) (type: boolean)
Select Operator
expressions: cust_id (type: int), name (type: string), status (type: string), 1 (type: int)
outputColumnNames: _col0, _col1, _col2, _col3
ListSink

这是在昨天的主线上测试的(d68630b6ed25884a76030a9073cd864032ab85c2)。如您所见,它仅扫描 t_realtime 并下推谓词 active_flag = 1的特定安装是否会执行此操作取决于您使用的版本。该主题不仅在 Hive 上而且在 Calcite 上都在积极开发中。 (由 Hive 使用)。

关于sql - Hive Optimizer 在优化 View 查询时是否考虑 View 定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44942631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com