我正在试图理解where子句是在侧面视图的情况下在Hive中爆炸之后运行还是之前运行。
例如,如果我有
SELECT *
FROM
(
SELECT
a1,
a2,
b.ds,
conv_list.threshold_conv[0]
AS t
FROM
t1 b
LATERAL VIEW EXPLODE({list})
conv_list as threshold_conv
WHERE
b.ds between '{DATE-29}' and '{DATE}'
)
ds过滤器在侧视图爆炸之前还是之后运行?
1条答案
按热度按时间u0njafvf1#
如果filter列是表中的一个分区,这就是分区的主要目的,即使where子句不在子查询中( predicate 下推)
横向视图有时可能是一个昂贵的操作,因此在应用横向视图之前,请先应用hive筛选器,然后根据您的查询查看以下执行计划(不同)。
现在,如果您的过滤器使用分解数组中的一些字段,我假设hive将尝试应用所有可能的过滤器,这些过滤器在应用横向视图之前不使用分解数据中的任何列,然后将您的过滤器应用于分解数据