【问题标题】:Immediate evaluation of CTE立即评估 CTE
【发布时间】:2017-11-06 09:26:48
【问题描述】:

我正在尝试优化包含多个 CTE 的非常长且复杂的 impala 查询。每个 CTE 被多次使用。我的期望是,一旦创建了 CTE,我应该能够指示 impala 该 CTE 的结果应该按原样在主查询中重新使用,而不是使用主查询再次对 CTE 中涉及的表进行 SCAN HDFS 操作。这可能吗?如果是怎么办?

我正在使用 impalad 版本 2.1.1-cdh5 RELEASE (build 7901877736e29716147c4804b0841afc4ebc9037) 版本

【问题讨论】:

  • 可能是个愚蠢的问题,但 CTE 是什么
  • @shainnif 我假设它的 Impala 公用表表达式

标签: hadoop impala cloudera-cdh


【解决方案1】:

我不这么认为。我相信 WITH 子句不会创建任何永久对象,它只是为了避免使用新表或视图使命名空间变得混乱,并通过重构更容易重构大型、复杂的查询 dering 和更换他们的个别部分。 WITH 子句中使用的查询是有朝一日成为视图或在 ETL 过程中具体化为汇总表的理想候选者。

【讨论】:

    【解决方案2】:

    这可能吗?

    CTE 的真正目的是通过后续查询(例如 SELECT)重用从前面查询(使用 with 子句)获得的结果。所以我看不出这是不可能的原因。

    在您的查询中使用Explain 以找出实际的 SCAN HDFS 详细信息。

    如需了解更多与 I/O 相关的见解,请使用profile,如官方文档中的https://www.cloudera.com/documentation/enterprise/5-7-x/topics/impala_explain_plan.html#perf_profile

    【讨论】:

    • CTE 的主要目的是重用查询,而不是捕获从运行所述查询收集的特定结果集。
    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 2013-03-09
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多