Материализованный вид первых строк - PullRequest
0 голосов
/ 29 мая 2019

Предположим, у меня есть таблица со столбцами date | group_id | user_id | text, и я хотел бы получить первые 3 текста (по дате) каждой пары group_id/user_id.

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

Другая проблема заключается в том, что столбец date не соответствует дате приема, означает ли это, что мне нужно добавить столбец даты приема, чтобы иметь возможность использовать @run_time в запланированных запросах?

В качестве альтернативы, было бы более разумно загрузить пакет в отдельную таблицу, сравнить ее с / обновить "первую / материализованную" таблицу, прежде чем объединять ее с основной таблицей? (таким образом, вместо того, чтобы иметь запросы к основной таблице, заполняйте материализованную таблицу по одному при каждой загрузке). Это выглядит хаки / неправильно хотя?

1 Ответ

0 голосов
/ 29 мая 2019

Вопрос связан с Я хочу «материализованное представление» последних записей и упоминает, что он имеет дело с отдельными строками, а не с несколькими.Вопрос говорит, что он хочет 3 последние строки вместо одной.

Для этого посмотрите на внутренний запрос в этом ответе.Вместо этого:

  SELECT latest_row.* 
  FROM (
    SELECT ARRAY_AGG(a ORDER BY datehour DESC LIMIT 1)[OFFSET(0)] latest_row
    FROM `fh-bigquery.wikipedia_v3.pageviews_2018` a
    WHERE datehour > TIMESTAMP_SUB(@run_time, INTERVAL 1 DAY )
    # change to CURRENT_TIMESTAMP() or let scheduled queries do it
    AND datehour > '2000-01-01' # nag
    AND wiki='en' AND title LIKE 'A%'
    GROUP BY title
  )

Сделайте это:

  SELECT latest_row.* 
  FROM (
    SELECT ARRAY_AGG(a ORDER BY datehour DESC LIMIT 3)[OFFSET(0)] latest_row
    FROM `fh-bigquery.wikipedia_v3.pageviews_2018` a
    WHERE datehour > TIMESTAMP_SUB(@run_time, INTERVAL 1 DAY )
    # change to CURRENT_TIMESTAMP() or let scheduled queries do it
    AND datehour > '2000-01-01' # nag
    AND wiki='en' AND title LIKE 'A%'
    GROUP BY title
  )

Re @run_time - вы можете сравнить его с любым столбцом, просто убедитесь, что столбец имеет смысллогика, которую вы хотите реализовать.

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