Несколько аналитических функций, занимающих всю память в большом запросе - PullRequest
0 голосов
/ 14 ноября 2018

Мне показалось, что я ловко избегаю нескольких ЛЕВЫХ СОЕДИНЕНИЙ и ГРУППОВЫХ БИТОВ в большом запросе со следующим:

 WITH added_a_boolean_column AS (
      SELECT
        *,
        NOT (DATE(CodedDate) >= "2018-04-01"
          AND DATE(CodedDate) < "2018-04-14") AS train
      FROM
      `XXXXX` )


SELECT 
   countif(train) OVER (PARTITION BY a) as a_counts,
   countif(train) OVER (PARTITION BY b) as b_counts,
   countif(train) OVER (PARTITION BY c) as c_counts,
   countif(train) OVER (PARTITION BY d) as d_counts,
   countif(train) OVER (PARTITION BY e) as e_counts,
   countif(train) OVER (PARTITION BY f) as f_counts,
   countif(train) OVER (PARTITION BY g) as g_counts,
   countif(train) OVER (PARTITION BY h) as h_counts,
   countif(train) OVER (PARTITION BY i) as i_counts
 FROM added_a_boolean_column

Однако ... это приводит к следующей ошибке:

Resources exceeded during query execution: The query could not be executed in the allotted memory. Peak usage: 152% of limit. Top memory consumer(s): sort operations used for analytic OVER() clauses: 99% other/unattributed: 1% .

Что именно происходит? Является:

 WITH added_a_boolean_column AS (
      SELECT
        *,
        NOT (DATE(CodedDate) >= "2018-04-01"
          AND DATE(CodedDate) < "2018-04-14") AS train
      FROM
      `XXXXX` ),

    a_count as (
        SELECT count(*) as a_counts, a FROM added_a_boolean_column WHERE train GROUP BY a),
    b_count as (.....
    ....
    ....

    i_count as (..

    SELECT * FROM added_a_boolean_column LEFT JOIN a_count.....

лучшая альтернатива?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...