我可以同时设置MAPJOIN提示和STREAMTABLE提示吗?

时间:2016-09-22 11:48:37

标签: hive

我可以这样使用吗?

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仍被视为大表? 怎么能处理这种情况?

2 个答案:

答案 0 :(得分:0)

您可以通过以下方式实现此目的:

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

您可能仍会遇到一些非常重要的与CBO相关的缺陷,特别是在我的经验中涉及窗口函数和柱状格式。因此,知道如何有效地应用提示是有用的。

答案 1 :(得分:-1)

我认为我们不需要在这里提供MAPJOIN,因为其他表除外,streamtable将被缓冲/缓存到所有节点中。因此它会自动变为mapjoin。