Я пытаюсь получить список организаций из нашей базы данных на основе города и штата организаций, сгруппированных по атрибуту org_name
.Эти организации имеют несколько вложенных массивов в качестве других атрибутов.Я должен развернуть агрегированный массив LOCATIONS
, чтобы запросить правильные местоположения.Поскольку я группирую по имени организации, я объединяю оставшиеся нужные атрибуты с ARRAY_CONCAT_AGG
для каждого массива, а затем запускаю пользовательскую функцию с именем dedup
, чтобы удалить любые повторяющиеся значения, поскольку все требуемые атрибуты должны быть сгруппированы или агрегированы.Это отлично работает на небольшом столе, но по мере увеличения я получаю следующую ошибку:
Resources exceeded during query execution: The query could not be executed in the allotted memory. Peak usage: 116% of limit. Top memory consumer(s): aggregate functions and GROUP BY clauses: 95% other/unattributed: 5%
.
Код выглядит следующим образом:
CREATE TEMP FUNCTION
dedup(val ANY TYPE) AS ((
SELECT
ARRAY_AGG(t)
FROM (
SELECT
DISTINCT *
FROM
UNNEST(val) v) t ));
SELECT
org_name,
dedup(ARRAY_CONCAT_AGG(sizes)) AS sizes,
dedup(ARRAY_CONCAT_AGG(org_nums)) AS org_nums,
dedup(ARRAY_CONCAT_AGG(location)) AS location,
dedup(ARRAY_CONCAT_AGG(types_of_professionals)) AS types_of_professionals,
dedup(ARRAY_CONCAT_AGG(specialties)) AS specialties
FROM
`merging_npi_medicare.practices`,
UNNEST(location) AS loc
WHERE
loc.professional_city = "HARRISBURG"
AND loc.professional_state = "PA"
GROUP BY
org_name
Моими ожидаемыми результатами будет таблица уникальных организаций с множеством размеров, телефонных номеров, местоположений, типов специалистов и специальностей.Тем не менее я получаю ошибку превышения памяти при запуске этого кода.Я понимаю, что ошибка должна заключаться в моих многочисленных агрегированных массивах и вызовах функций UDF, но я просто не знаю, как еще добиться того, чего я хотел бы.
Следующая ссылка демонстрирует, как я хотел бы, чтобы результаты выглядели.Это было достигнуто путем запуска того же запроса, что и выше, только с дополнительным параметром, который искал только организации с именами, включающими PINNACLE
.
https://i.stack.imgur.com/8nJpb.png
Любая и вся помощь будет оценена!