优化Hive子查询查询

时间:2017-11-08 10:05:27

标签: optimization hive cbo

我使用的是HDP 2.6.2和hive。

我有一种情况,我正在基于列更新大表中的分区表,并且查询不能很好地执行,我不明白为什么。下面的插入语句是一个示例

insert into partitioned_table partition(dt_month) select * from large_table where incremental_string_col > (select last_incremental_col from temp_tab)

这里我假设,where子句中的子查询执行一次并且结果被缓存,或者整个temp_tab表基本上只有一行被CBO运送到所有节点,但它似乎没有像把字符串值作为文字!

我可以明确声明需要在hive中缓存表吗? 我是否可以明确声明查询只需执行一次并缓存结果? 我在这里缺少什么?

我理解字符串中的列不是最好的情况,但我无法帮助。

任何帮助都将非常感谢!!

1 个答案:

答案 0 :(得分:0)

您可以使用交叉地图加入单行子查询,然后按不等式条件过滤行:

select * 
  from large_table l
       cross join (single_row_subquery) s
 where l.incremental_string_col>s.last_incremental_col;

或者在一个单独的脚本中计算子查询并传递为hivevar变量,如下所示:https://stackoverflow.com/a/37821218/2700344