分享

hive 大表关联查询优化的疑问

Hive 大表join查询的优化

上面的帖子中,我有一个疑问:为何不在对大表关联查询之前,对a表的脏数据进行过滤一遍,然后基于过滤后的结果集在和表b进行关联?

[mw_shl_code=sql,true]from trackinfo a
left outer join pm_info b
on (
    case when (a.ext_field7 is not null
        and length(a.ext_field7) > 0
        and a.ext_field7 rlike '^[0-9]+$')
    then
        cast(a.ext_field7 as bigint)
    else
        cast(ceiling(rand() * -65535) as bigint)
    end = b.id
)



为何不在关联之前将trackinfo表中的数据先过滤一下,然后在进行关联查询?不可以吗?
from (select * from trackinfo t where t.id is not null and nd length(a.ext_field7) > 0
        and a.ext_field7 rlike '^[0-9]+$') as a
left out join pm_info b on a.id = b.id[/mw_shl_code]

本帖被以下淘专辑推荐:

已有(4)人评论

跳转到指定楼层
javaanddonet 发表于 2018-4-24 14:23:38
有大佬给解释了一下:
第一种写法,结果集会以A表的记录数为准。
第二种写法,结果集会过滤掉id为空的记录。
比如:A表原先有10000条记录,其中id为空的为2000条,那么第一种写法,结果集还是10000条记录。而第二种写法,结果集会只有8000条记录。
两种写法都可以,只不过看具体的业务需求,是怎么样定义的。需不需要id为空的记录出现在结果集中。
回复

使用道具 举报

javaanddonet 发表于 2018-4-24 11:46:41
希望大神能够指点一二,多谢~
回复

使用道具 举报

desehawk 发表于 2018-4-24 14:58:13
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条