代码之家  ›  专栏  ›  技术社区  ›  Eli Reiman

配置单元性能优化-CTEs

  •  2
  • Eli Reiman  · 技术社区  · 6 年前

    请您了解如何调整hive CTE以提高性能。我有一个类似这样的查询。编辑:请注意,下面的两个语句具有不同的映射条件,因此这两个WHERE条件不能像下面的注释中建议的那样简单地与OR条件组合。

    WITH complex_query AS (
    ... big nasty HQL statement ...
    )
    SELECT complex_mapping_case FROM complex_query
    WHERE condition_1
    UNION ALL 
    SELECT different_mapping_case FROM complex_query
    WHERE condition_2
    UNION ALL 
    .... many more times....
    

    配置单元是否智能地执行一次CTE查询并将结果存储在内存(或磁盘)中,还是针对每个WHERE条件多次执行CTE?

    您认为最好将其作为一个CTE来执行,还是将其具体化为一个具有最佳索引、bucketing和排序的stage表?谢谢

    2 回复  |  直到 6 年前
        1
  •  1
  •   LJ01    6 年前

    我的理解是,工会都将多次运行该查询。

    如果使用

    select * from cte
    where condition_1 OR condition_2
    

    而不是

    select * from cte
    where condition_1
      union all
    select * from cte
    where condition_2
    

    如果您必须多次从cte中选择,我的理解是每次都会从磁盘读取。

    我的理论(仅基于我有限的经验)是,临时表的性能提高取决于您有多少Ram和您的服务器设置

        2
  •  0
  •   Gordon Linoff    6 年前

    这条评论太长了。

    为什么要使用 union all ?为什么不直接使用 or :

    WITH complex_query AS (
    ... big nasty HQL statement ...
    )
    SELECT *
    FROM complex_query
    WHERE condition_1 OR condition_2 . . .