Мы находим, что когда мы запускаем запросы с UDF на больших входах, они часто терпят неудачу очень часто с «внутренней ошибкой». Одна мысль о том, чтобы сделать ситуацию менее частым, состоит в том, чтобы разбить таблицу перед запуском запроса. Но результаты все равно прерывисты - иногда запрос преуспевает, иногда он терпит неудачу (тот же самый запрос на одном и том же входе).Разбиение таблицы в BigQuery для получения более быстрого результата
Таким образом, вопрос, как это обычно более надежны и/или быстрее, чтобы запустить этот запрос:
SELECT field1, field2 FROM (SELECT field1, field2 FROM some_udf( SELECT field1, field2 FROM table_with_300_MM_rows WHERE hash(some_unique_key) % {n} = {table_id_1}) ), .... ( SELECT field1, field2 FROM some_udf( SELECT field1, field2 FROM table_with_300_MM_rows WHERE hash(some_unique_key) % {n} = {table_id_n}) ),
Вместо этого?
SELECT field1, field2 FROM some_udf( SELECT field1, field2 FROM table_with_300_MM_rows)
И если да, то для чего значения п? (сколько подтабликов нам нужно разбить для оптимальной производительности)? Наше понимание заключается в том, что этот не должен происходить, так как он, вероятно, связан с ошибкой UDF, и если UDF успешно (индивидуально) разделяет все входы, нет причин, по которым он не должен преуспеть во всем вводе.
Предположим, что запрос таков, что обе методологии выше приводят к тому же точному результату.
Привет, это та же проблема, о которой вы сообщали в http://stackoverflow.com/questions/37216672/bigquery-request-timed-out-error-on-script. Пожалуйста, см. Мой комментарий там. – thomaspark