【发布时间】:2019-04-04 12:42:07
【问题描述】:
当前情景: 我有这个查询,它对两组数据进行联合,然后根据排名选择字段 但是根据我的分析,整个数据集可以在 UNION 的一侧移除
分析: 因此,如果您查看以下查询 - 我认为,我们可以完全忽略并删除由表连接生成的数据集:P、Q、R、S 和 T
我也可以在这里用 union 替换 unionall
查询:
SELECT OUTERV.f1, ... OUTERV.f30
FROM
(
SELECT
unionV.f1, ...unionV.f30, ROW_NUMBER() over (PARTITION BY unionV.ifc order by unionV.orderNUM_ asc) rank_
FROM
(
SELECT f1 .. few fields, 1 as ORDERNUM_
FROM
A
JOIN B on A.id = B.id
JOIN ( SELECT few remaining fields FROM C )
C ON C.id = B.id
JOIN D ON C.id = D.id
JOIN E ON E.id = D.id
JOIN F on F.id = E.id
UNION ALL
SELECT
f1, f2, ...f30 , 2 as ORDERNUM_
FROM
P
JOIN Q ON P.id = Q.id
JOIN R ON Q.id = R.id
JOIN S on S.id = R.id
JOIN T on S.id = T.id
)unionV
)
OUTERV where
OUTERV.rank_ = 1
请求: 请确认我的分析是否正确。
【问题讨论】:
标签: sql hadoop hive query-optimization hiveql