我使用的是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中缓存表吗? 我是否可以明确声明查询只需执行一次并缓存结果? 我在这里缺少什么?
我理解字符串中的列不是最好的情况,但我无法帮助。
任何帮助都将非常感谢!!
答案 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