У меня проблемы с ограничениями BigQuery JS UDF. Единственным документально подтвержденным ограничением памяти [1] является ограничение approximately 5 MB or less
на объем данных, выводимых UDF, поэтому я настроил внутреннюю проверку для возврата ошибки, когда выходной буфер превышает ~ 3 МБ (до преобразования base64); но даже при этом я превышаю ограничения при запуске UDF для ряда строк, хотя по отдельности они работают нормально.
Например, это не так с Resources exceeded during query execution: UDF out of memory.
WITH joined_data AS
(
SELECT z, x, y, ARRAY_AGG(data) as data
FROM `rmr_tests.z6_pre_agg`
WHERE x = 14
GROUP BY z, x, y
)
SELECT z, x, y, rmr_tests.UDFNAME(data, 4096, '{}') as mvt from joined_data
Идентификатор задания: cartodb-gcp-backend-data-team: US.bquxjob_1628ffa1_170c4d0d50f
С другой стороны, если я уловлю Bigquery для пакетной обработки вызовов в UDF по-другому, у меня нет проблем:
WITH joined_data AS
(
SELECT z, x, y,
ARRAY_AGG(data) as data,
ABS(MOD(FARM_FINGERPRINT(CONCAT(CAST(x AS STRING), y, CAST(z AS STRING))), 5)) AS r
FROM `rmr_tests.z6_pre_agg`
WHERE x = 14
GROUP BY z, x, y
)
SELECT z, x, y, rmr_tests.UDFNAME(data, 4096, '{}') as mvt FROM joined_data WHERE r = 0
UNION ALL
SELECT z, x, y, rmr_tests.UDFNAME(data, 4096, '{}') as mvt FROM joined_data WHERE r = 1
UNION ALL
SELECT z, x, y, rmr_tests.UDFNAME(data, 4096, '{}') as mvt FROM joined_data WHERE r = 2
UNION ALL
SELECT z, x, y, rmr_tests.UDFNAME(data, 4096, '{}') as mvt FROM joined_data WHERE r = 3
UNION ALL
SELECT z, x, y, rmr_tests.UDFNAME(data, 4096, '{}') as mvt FROM joined_data WHERE r = 4
Идентификатор задания: cartodb-gcp-backend-data-team: US.bquxjob_3f216117_170c4d2abae
Я не уверен, что это важно, но данные, передаваемые в UDF, могут быть большими ( ~ 20 МБ в этом примере) и выходной файл имеет тип BYTE (самый большой - 2,71 МБ, как сообщается в Length (mvt)).
В прошлом была похожая проблема [2], на которую ссылалась возможная проблема с v8, но у меня нет способа узнать, если это та же проблема.
Это проблема в моем UDF или проблема с v8 + Bigquery? Я тестировал эквивалентный код в узле, и память остается стабильной (никаких заметных утечек после 20-30 минут работы).
[1] - https://cloud.google.com/bigquery/docs/reference/standard-sql/user-defined-functions
[2] - { ссылка }
Редактировать: Сообщил об этом в трекере ошибок: https://issuetracker.google.com/u/1/issues/151212192