Запрос работает без таблицы назначения, но завершается неудачно с таблицей назначения "ресурсы превышены" - PullRequest
0 голосов
/ 27 марта 2020

У меня есть запрос, который производит около 20 миллионов строк, которые должны быть упорядочены по метке времени DES C. Когда я использую параметр «Сохранить результаты запроса во временной таблице», тогда запрос работает, но когда я задаю таблицу назначения, запрос завершается неудачно с ошибкой «Ресурсы превышены во время выполнения запроса: запрос не может быть выполнен в выделенном Память. Пиковое использование: 126% от лимита. Верхнее потребление памяти: Операции ORDER BY: 97%, остальные / не распределены: 3% ". Я не хочу устанавливать предел, потому что мне нужны все выходные строки для продолжения анализа. В чем разница между временной таблицей и таблицей назначения. Почему один работает, а другой нет. Наконец, как я могу решить эту проблему? Единственный способ, которым я могу придумать, - это уменьшить количество строк, поэтому в основном разбейте его на несколько «одинаковых» запросов, которые извлекают разделы конечного результата, но это увеличит мои затраты примерно в 5-10 раз.

1 Ответ

1 голос
/ 27 марта 2020

Чтобы суммировать комментарии как ответы:

  • Вы действительно не хотите сортировать 20 миллионов строк, а затем поместить их обратно в BigQuery в виде таблицы. В этом нет особой выгоды.

  • Что вам действительно нужно, так это сортировать строки по каждому типу активации. Решением для этого является использование ARRAY_AGG(), а также OVER(PARTITION BY).

  • В качестве альтернативы, которая будет сохранять ваши данные отсортированными по всей таблице: Используйте CLUSTERING BY. Тогда все ваши запросы будут запрашивать только ту часть данных.

См .:

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