#google-bigquery
#google-bigquery
Вопрос:
Я продолжаю получать сообщение об ошибке
Query exceeded resource limits. 2730.807817954678 CPU seconds were used, and this query must use less than 2500.0 CPU seconds. at [2:3]
Сначала я выполнял этот запрос:
create temp table data as
select *
from table
left join othertable
using(caseid);
EXECUTE IMMEDIATE (
SELECT """
SELECT caseid, """ ||
STRING_AGG("""MAX(IF(code = '""" || code || """', 1, 0)) AS _""" || REPLACE(code, '.', '_'), ', ')
|| """
FROM data
GROUP BY caseid
"""
FROM (
SELECT DISTINCT code
FROM data
ORDER BY code
)
);
Я подумал, что, возможно, слишком много записей (7,5 миллионов записей), поэтому я сузил запрос до этого:
create temp table data as
select *
from table
left join othertable
using(caseid)
where year = "2009";
EXECUTE IMMEDIATE (
...
);
Это должно быть всего около 150 000 записей. Я все еще получаю ту же ошибку, только на этот раз она просто уменьшает максимальный лимит секунд процессора. Ранее он сообщал мне, что он должен использовать менее 10 000 секунд процессора, затем, когда я уменьшил размер запроса, он сказал мне, что он должен составлять менее 2500 секунд процессора (как показано в первоначальном сообщении об ошибке выше).
Почему изменяется лимит секунд процессора и как я могу решить эту проблему?
Ответ №1:
Дело не в объеме обрабатываемых данных.Поскольку вы не используете фиксированную скорость, стоимость вашего запроса зависит от объема отсканированных (обработанных) данных. Вы можете себе представить, что существует верхний предел обработки (или процессорного времени), разрешенный для данного объема данных.
Люди сталкивались с этим большую часть времени, потому что у них было слишком много вычислений над данными. Один из способов обойти это — разбить запрос на более мелкие шаги и материализовать промежуточное состояние (возможно, с помощью временной таблицы) между ними.
Комментарии:
1. Ах, я понимаю — мое
computation:data
соотношение слишком велико.2. Да, это еще один способ сказать это.