2016-05-15 2 views
0

Мы находим, что когда мы запускаем запросы с 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 успешно (индивидуально) разделяет все входы, нет причин, по которым он не должен преуспеть во всем вводе.

Предположим, что запрос таков, что обе методологии выше приводят к тому же точному результату.

+0

Привет, это та же проблема, о которой вы сообщали в http://stackoverflow.com/questions/37216672/bigquery-request-timed-out-error-on-script. Пожалуйста, см. Мой комментарий там. – thomaspark

ответ

1

Вы, конечно же, не должны получить внутреннюю ошибку. В любое время, когда это происходит, это наша вина - по крайней мере, мы должны отследить правильное сообщение об ошибке.

Кроме того, справедливо ожидать, что любой запрос, который работает для небольшого количества данных, продолжит работу по мере роста размера таблицы. Мы отвечаем за масштабирование и разбиение, поэтому вам не нужно беспокоиться об этом.

Недавно мы видели несколько подобных вопросов масштабирования UDF и скоро их расследуем. Надеюсь, мы исправим проблему с нашей стороны, и вам больше не придется об этом беспокоиться.

Это говорит о том, что если разделение таблицы помогает получить запрос, чтобы пройти, на данный момент, пойдите для этого. Недостатком является то, что вы получите два раза за два сканирования таблицы, поэтому, если это обычная операция, вам может понадобиться разбить таблицу на две постоянные таблицы, а затем запустить отдельные запросы (или подзапросы) над этими меньшими таблицами ,

Смежные вопросы