优化 Hive 子查询



我正在使用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 子句中的子查询执行一次,结果被缓存,或者 CBO 将基本上只有一行的整个 temp_tab 表运送到所有节点,但它似乎不像将字符串值作为文字输入那样好!

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

我知道字符串中的列不是最好的情况,但我无能为力。

任何帮助将不胜感激!

您可以将交叉映射连接与单行子查询一起使用,然后按不相等条件过滤行:

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

相关内容

  • 没有找到相关文章

最新更新