#google-cloud-platform #google-bigquery
#google-cloud-platform #google-bigquery
Вопрос:
Мой запрос выглядит следующим образом
SELECT
DISTINCT id,
STRING_AGG(DISTINCT column1) AS mobile,
STRING_AGG(DISTINCT country) AS country,
STRING_AGG(DISTINCT language) AS language,
STRING_AGG(DISTINCT address) AS address,
STRING_AGG(DISTINCT model) AS model,
STRING_AGG(DISTINCT car) AS car,
STRING_AGG(DISTINCT class) AS class,
home_email,
buisness_email,
MAX(timestamp) AS timestamp
FROM
user
GROUP BY
id,
home_email,
buisness_email
Когда я запускаю этот запрос в своей таблице объемом 2 ТБ в bigquery и устанавливаю параметры запроса для экспорта выходных данных в таблицу, он выдает ошибку
Примечание: когда я запускаю его с объемом данных 500 ГБ, он работает нормально
Превышение ресурсов во время выполнения запроса: ваш проект или организация превысили максимальный лимит диска и памяти, доступных для операций перемешивания. Рассмотрите возможность выделения большего количества слотов, уменьшения параллелизма запросов или использования более эффективной логики в этом задании.
Итак, как я могу решить эту проблему, пожалуйста?
Также после этого мне нужно будет выполнить тот же запрос для объединения this table с другой таблицей объемом 1 ТБ
Ответ №1:
Я могу выполнить предложение (но я не знаю, работает ли оно, у меня недостаточно большой набор данных. Итак, если нет, я удалю этот «ответ-попробуйте»)
Идея состоит в том, чтобы разделить agg на разные подзапросы. а затем объединить все эти подразделы.
WITH agg_mobile AS (
SELECT
DISTINCT id,
STRING_AGG(DISTINCT column1) AS mobile,
home_email,
buisness_email,
MAX(timestamp) AS timestamp
FROM
user
GROUP BY
id,
home_email,
buisness_email
),
agg_country AS (
SELECT
DISTINCT id,
STRING_AGG(DISTINCT country) AS country,
FROM
user
GROUP BY
id,
home_email,
buisness_email
)
....
SELECT agg_mobile.*,
agg_country.country,
....
FROM agg_mobile
LEFT JOIN agg_country ON agg_mobile.id = agg_country.id
LEFT JOIN .....
Комментарии:
1. Большое вам спасибо. Это хорошая идея. Я попробую это сделать и сообщу вам о результате.
2. Я пробовал этот SELECT id, ARRAY_AGG(РАЗНЫЕ идентификаторы студентов) В КАЧЕСТВЕ идентификаторов студентов, MAX(date) В КАЧЕСТВЕ даты ОТ студентов, UNNEST(students_ids) В КАЧЕСТВЕ идентификаторов студентов, ГДЕ students_ids != «1111» ГРУППИРУЕТСЯ ПО идентификатору; —— и все еще не работает