Есть ли в Bigquery эквивалентная функция, использующая стандартный SQL для функций max_by и regr_slope. Если не как этого добиться.
Спасибо, Манияр





Не похоже, что BigQuery поддерживает любую из этих функций из коробки. Для MAX_BY вы можете просто использовать ROW_NUMBER:
-- replacement for MAX_BY(col, val)
-- find the value for col which generates the MAX value
WITH cte AS (
SELECT col, ROW_NUMBER() OVER (ORDER BY val DESC) rn
FROM yourTable
)
SELECT col
FROM cte
WHERE rn = 1;
Или вы можете использовать LIMIT, если ваша версия BigQuery поддерживает это:
SELECT col
FROM yourTable
ORDER BY val DESC
LIMIT 1;
Что касается выполнения линейной регрессии в BigQuery, я отсылаю вас к вопросу и ответу это получившее большое количество голосов Stack Overflow.
Ну, поскольку BigQuery не поддерживает индексирование AFAIK, тогда да, для такой большой таблицы может быть снижение производительности.
Спасибо @Tim Biegeleisen. Есть ли другой вариант в моем сценарии?
Заметьте, что я легко могу придумать. Если BigQuery поддерживает триггеры, вы можете попробовать реализовать триггер, который сравнивает новое входящее значение с текущим максимальным значением и, если оно больше, записывает это новое максимальное значение во вторую таблицу.
Линейная регрессия: BigQuery теперь может использовать CREATE MODEL, а затем прогнозировать с помощью SELECT FROM ML.PREDICT. Есть лучшая альтернатива ROW_NUMBER() OVER - ARRAY_AGG(x ORDER BY y LIMIT 1).
Как @ felipe-hoffa прокомментировал в другом вопросе, самый короткий способ заменить MAX_BY, похоже, использует ARRAY_AGG следующим образом:
SELECT
ARRAY_AGG(x ORDER BY y DESC LIMIT 1)[OFFSET(0)] AS max_x_by_y
FROM yadda_yadda
Первый запрос в приведенном выше примере (ROW_NUMBER) требует предложения PARTITION BY. Мое дальнейшее требование - мне нужно присоединить этот вывод запроса к другому набору результатов. Размер таблицы 100ГБ, будут ли проблемы с производительностью и лимитом ресурсов