несколько JOIN на SQL - bigQuery - PullRequest
0 голосов
/ 24 февраля 2019


Я работаю над простым bigQuery, который возвращает мне размеры шрифтов через github.Все работает, пока я не добавлю следующий оператор JOIN.Я ищу файл, в котором совпадает мое регулярное выражение, а затем получает его имя и путь к репо.Тогда я подумал, что было бы неплохо также указать дату последнего коммита и дату его создания.Хотя эти данные находятся в другом наборе данных, и я не могу помочь себе с этой логикой.

SELECT
  f.repo_name, f.path, c.font_size, com.committer
FROM
 [bigquery-public-data:github_repos.sample_files] f
JOIN (
  SELECT
    id,
    REGEXP_EXTRACT(content, r'(font-size.*?;)') AS font_size
  FROM
    [bigquery-public-data:github_repos.sample_contents]
  WHERE
    REGEXP_MATCH(content, r'(font-size.*?;)')
) c
ON
  f.id = c.id
JOIN(
  SELECT
    committer,
    repo_name
  FROM
     [bigquery-public-data:github_repos.sample_commits] 
) com
ON 
  f.repo_name = com.repo_name

С этим кодом я получаю сообщение об ошибке Only leaf fields can be selected. Field committer used in the query is non leaf.

1 Ответ

0 голосов
/ 24 февраля 2019

Используйте стандартный SQL!

#standardSQL

SELECT f.repo_name, f.path, 
       REGEXP_EXTRACT(c.content, r'(font-size.*?;)') as font_size,
       com.committer
FROM `bigquery-public-data.github_repos.sample_files` f JOIN
     `bigquery-public-data.github_repos.sample_contents` c
     ON f.id = c.id JOIN
     `bigquery-public-data.github_repos.sample_commits` com
     ON f.repo_name = com.repo_name
WHERE REGEXP_CONTAINS(content, r'(font-size.*?;)');

Примечания:

  • Ссылки на таблицы немного отличаются в Standard SQL.
  • Эквивалент regexp_match()is regexp_contains().
  • Подзапросы не нужны.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...