2016-09-22 86 views
0

我可以这样使用吗?我可以同时设置MAPJOIN提示和STREAMTABLE提示吗?

select /*+ MAPJOIN(t2)*//*+ STREAMTABLE(t1)*/ 
     t1.c1. 
     t2.c1 
from t1 
left outer join t2 
on t1.c1 = t2.c1; 

我对不同的连接键上的“STREAMTABLE”感到困惑。

例如: t3是最大表,t2是次要大表,t1是最小表。

select 
    /*+ STREAMTABLE(t2)*/ 
    t1.c3, 
    t2.c2, 
    t3.c3 
from t2 
left outer join 
t1 
on t2.c1=t1.c1 
left outer join 
t3 on t2.c2=t3.c2; 

所以,如果当t2连接t1是可以的。但是当t2连接t3时,如果t2仍然被视为大表? 如何处理这种情况?

+0

请不要使用这些提示。基于成本的优化器将完成这项工作。使用基于成本的优化器+统计信息。 – leftjoin

+0

@leftjoin嗨,我该怎么做?我的配置文件版本是0.13.x?我该怎么做? – user5107182

+0

升级。 0.14 Tez上的Hive工作速度更快,不需要任何提示。 – leftjoin

回答

0

您可以通过以下实现:

select /*+ MAPJOIN(t2), STREAMTABLE(t1)*/ 
    t1.c1. 
    t2.c1 
from t1 
left outer join t2 
on t1.c1 = t2.c1; 

有一个不平凡的数字,你可能仍然会碰到CBO有关的缺陷的,尤其是涉及窗口函数和柱状格式在我的经验。因此知道如何有效应用提示是有用的。

相关问题