我正在使用hdp2.6.2和hive。
我遇到了这样一种情况:我正在更新一个基于列的大表中的分区表,而查询执行得不好,我无法理解原因。下面的insert语句就是一个例子 insert into partitioned_table partition(dt_month) select * from large_table where incremental_string_col > (select last_incremental_col from temp_tab)
在这里,我假设where子句中的子查询执行一次,结果被缓存,或者cbo将整个temp\u tab表(基本上只有一行)发送到所有节点,但它似乎没有像将字符串值作为文本输入那样工作!
我可以显式地声明一个表需要缓存在配置单元中吗?我是否可以显式地声明一个查询只需要执行一次,然后缓存结果?我错过了什么?
我明白,列在哪里是一个字符串不是最好的情况下,但我不能帮助这一点。
任何帮助都将不胜感激!!
1条答案
按热度按时间sgtfey8w1#
您可以对单行子查询使用交叉Map联接,然后按不等式条件筛选行:
或者在单独的脚本中计算子查询并作为hivevar变量传递,如下所示:https://stackoverflow.com/a/37821218/2700344