Масштабируемость аналитических функций в BigQuery
Серьезным препятствием для перехода нашей команды к BigQuery является проблема масштабируемости аналитических функций.Я прочитал многочисленные ответы здесь, и они либо говорят, что это не может быть сделано, так как сортировка должна быть выполнена в одном слоте [ 1 ] [ 2 ] [ 3 ], до PARTITION
[ 1 ] [ 2 ] [ 3 ] или до LIMIT
[ 1 ][ 2 ] [ 3 ] [ 4 ] [ 5 ].
Для нас проблема в том, что нам нужнобыть способным делать это без разделения и без ограничений.Мы бы очень предпочли не экспортировать наши данные, выполнять аналитическую функцию в другой программе, а затем каждый раз загружать данные обратно в BigQuery.
Вопросы:
- Существует ли дорожная карта для улучшения масштабируемости аналитических функций в BigQuery?
- Можно ли выделить больше памяти, чтобы на одном узле можно было разместить больше данных?
Пример:
Размер таблицы: 3,76 ГБ
Два столбца: UNIQUE_ID
& SALES
140 миллионов строк
SELECT
UNIQUE_ID
, SALES
, NTILE(10) OVER (ORDER BY SALES ASC) AS SALES_DECILE
FROM `project.dataset.table`
Ошибка: Resources exceeded during query execution: The query could not be executed in the allotted memory. OVER() operator used too much memory.
Для моих целей, не иметь ровно 10% записей в каждом дециле - это нормально, поэтому APPROX_QUANTILES()
добивается цели, но я не уверен, что это нормально с другими командами.Вопросы все еще остаются, когда дело доходит до других аналитических функций, которые нуждаются в точном количестве.Например, мне нужно ROW_NUMBER() OVER()
каждой записи в таблице 140 миллионов строк с одним уникальным атрибутом ID, который не является числовым, поэтому я вообще не могу PARTITION
.В противном случае, я бы полностью сделал это предложение .