【问题标题】:Data Lake Analytics - Large vertex query数据湖分析 - 大型顶点查询
【发布时间】:2017-11-23 06:36:01
【问题描述】:

我有一个简单的查询,它使用两个字段创建一个 GROUP BY:

@facturas =
    SELECT a.CodFactura,
       Convert.ToInt32(a.Fecha.ToString("yyyyMMdd")) AS DateKey,           
      SUM(a.Consumo) AS Consumo
    FROM @table_facturas AS a
    GROUP BY a.CodFactura, a.DateKey;

@table_facturas 有 4100 行,但查询需要几分钟才能完成。看到图形资源管理器,我看到它使用 2500 个顶点,因为我有 2500 个 CodFactura+DateKey 唯一行。我不知道这是否正常 ADAL 行为。有什么方法可以减少顶点数并更快地执行此查询?

【问题讨论】:

    标签: azure-data-factory azure-data-lake u-sql


    【解决方案1】:

    首先:我不确定您的查询是否真的会编译。您需要在 GROUP BY 中使用 Convert 表达式,或者在之前的 SELECT 语句中使用。

    其次:为了回答您的问题,我们需要知道完整的查询是如何定义的。 @table_facturas 来自哪里?它是如何产生的?

    没有这些信息,我只能给出一些疯狂的推测:

    1. 如果@table_facturas 来自实际的 U-SQL 表,则您的表过度分区/碎片化。这可能是因为:

      • 您最初在分组列上插入了大量数据,并且您有一个减少每个分区的行数的谓词和/或您没有最新的统计信息(在列)。

      • 您执行了很多 INSERT 语句,每个语句都向表中插入少量行,从而创建了大量单独的文件。这也将“横向扩展”处理。使用ALTER TABLE REBUILD 重新压缩。

    2. 如果它来自文件集,则输入中的小文件可能过多。看看你能不能把它们合并成更小、更大的文件。

    如果上述方法对添加OPTION(ROWCOUNT=4000) 没有帮助,您也可以尝试在查询中提示创建@table_facturas 的少量行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      相关资源
      最近更新 更多