Достижение ограничений Bigquery JS UDF несколькими строками - PullRequest
2 голосов
/ 10 марта 2020

У меня проблемы с ограничениями 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

1 Ответ

0 голосов
/ 11 марта 2020

Когда вы говорите: «Я превышаю ограничения при выполнении UDF для ряда строк, хотя по отдельности они работают нормально». Я думаю, что именно поэтому вы устанавливаете ограничения, поскольку «Документация по ограничениям UDF» относится к одной строке следующим образом:

«Количество данных, которое выводит ваш JavaScript UDF при обработке одной строки - примерно 5 МБ или меньше. "

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