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