Google BigQuery (LegacySQL) GROUP BY - PullRequest
0 голосов
/ 05 июня 2018

Я делал привет в Google BigQuery, должен был выполнить его (в Cloud Shell) и получить некоторые результаты, но вместо этого я получил сообщение об ошибке в списке GROUP BY.

НоGoogle Docs говорит мне иначе на этом , что мой LegacySQL правильный.

=====

$bq query --use_legacy_sql=true "SELECT REGEXP_REPLACE(title,r'_', ' ') AS regexp_title, views FROM (SELECT * FROM [bigquery-samples:wik
ipedia_benchmark.Wiki100M] WHERE NOT title CONTAINS ':' AND wikimedia_project='wp' AND language='en' AND REGEXP_MATCH(title, r'^G.*o.*o.*e$') GROUP BY title ORDER BY views DESC LIMIT 10)"

Ожидание bqjob_r47d6732dcb76803b_00000163cfb22bdc_1 ... (0s) Текущий статус: СОВЕРШЕНО

Error in query string: Error processing job 'ordinal-throne-172104:bqjob_r47d6732dcb76803b_00000163cfb22bdc_1': Expression 'year' is not present in the GROUP BY list

=====

Пожалуйста, не могли бы вы, уважаемый эксперт, помочь мне пролить свет на это?

Спасибо.Будет

1 Ответ

0 голосов
/ 05 июня 2018

Это на самом деле не проблема с BigQuery, а проблема с SQL, так как запрос, который вы пытаетесь выполнить, некорректен и не будет работать в любой среде, управляемой SQL.На первый взгляд я вижу несколько проблем:

  1. Вы используете оператор GROUP BY, но ничего не группируете.GROUP BY часто используется с агрегатными функциями (такими как COUNT , MAX , MIN , SUM или AVG ) для группировки наборов результатов, но вы не делаете этого в своем запросе.
  2. GROUP BY операторы должны включать все поля, которые вы собираетесь получить.В своем вложенном запросе вы запрашиваете все поля (*), но, например, вы не группируете по year, поэтому BQ жалуется: Expression 'year' is not present in the GROUP BY list.
  3. Вывыполняем вложенный запрос SELECT.Если вас интересуют только поля views и title , почему бы не запросить их напрямую, а ваш запрос будет использовать меньше ресурсов (так как он будет искать только эти два столбца)?

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

SELECT
  REGEXP_REPLACE(title,r'_', ' ') AS regexp_title,
  SUM(views) as sum_views
FROM
  [bigquery-samples:wikipedia_benchmark.Wiki100M]
WHERE
  NOT title CONTAINS ':'
  AND wikimedia_project='wp'
  AND language='en'
  AND REGEXP_MATCH(title, r'^G.*o.*o.*e$')
GROUP BY
  regexp_title
ORDER BY
  sum_views DESC
LIMIT
  10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...