Передать переменную из представления в предложении LIMIT в Bigquery - PullRequest
0 голосов
/ 23 сентября 2019

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

У меня есть следующий код Bigquery SQL.

WITH vars AS (
  SELECT 3 as num_months,
         200000 as num_users
)

SELECT id, count(d.value) as count_value
FROM events_data evt, unnest(evt.data) AS d, vars
WHERE  DATE(eventdate) > date_sub(current_date(), INTERVAL num_months MONTH) AND d.key='eventid'
GROUP BY id
ORDER BY count_value
LIMIT num_users

Использование num_months прекрасно работает при фильтрации числа месяцев, однако, когда я пытаюсь ограничить количество пользователей в пределахLIMIT предложение выдает следующую ошибку

Syntax error: Unexpected identifier "num_users"

Я даже пытался ссылаться на представление так же, как vars.num_users

1 Ответ

1 голос
/ 23 сентября 2019

Использование row_number():

WITH params AS (
      SELECT 3 as num_months, 200000 as num_users
     )
SELECT *
FROM (SELECT id, COUNT(*) as count_value,
             ROW_NUMBER() OVER (ORDER BY COUNT(*) ASC) as seqnum
      FROM events_data evt, unnest(evt.data) d JOIN
           params
           ON DATE(eventdate) > date_sub(current_date(), INTERVAL num_months MONTH) AND
      WHERE d.key = 'eventid'
      GROUP BY id
     ) id CROSS JOIN
     params
WHERE seqnum <= params.num_users
ORDER BY count_value;

Обычно я называю такие CTE params, поэтому я переименовал их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...