Стандартные функции SQL Bigquery "max_by" и "regr_slope"

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

Спасибо, Манияр

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
1 487
2

Ответы 2

Не похоже, что 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.

Первый запрос в приведенном выше примере (ROW_NUMBER) требует предложения PARTITION BY. Мое дальнейшее требование - мне нужно присоединить этот вывод запроса к другому набору результатов. Размер таблицы 100ГБ, будут ли проблемы с производительностью и лимитом ресурсов

Maniyar 10.01.2019 14:25

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

Tim Biegeleisen 10.01.2019 14:49

Спасибо @Tim Biegeleisen. Есть ли другой вариант в моем сценарии?

Maniyar 10.01.2019 16:21

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

Tim Biegeleisen 10.01.2019 16:23

Линейная регрессия: BigQuery теперь может использовать CREATE MODEL, а затем прогнозировать с помощью SELECT FROM ML.PREDICT. Есть лучшая альтернатива ROW_NUMBER() OVER - ARRAY_AGG(x ORDER BY y LIMIT 1).

Felipe Hoffa 10.01.2019 23:31

Как @ 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

Другие вопросы по теме