BigQuery для GitHub: как получить наиболее избранные репо с указанным c языком - PullRequest
1 голос
/ 24 января 2020

Я хочу получить список репо с наибольшим количеством звездочек, используя BigQuery. Я написал запрос, но я не уверен в результате:

SELECT
  repo.name, 
  count(JSON_EXTRACT_SCALAR(payload, '$.pull_request.base.repo.stargazers_count')) as Stars
FROM `githubarchive.year.2019`  
WHERE
  JSON_EXTRACT_SCALAR(payload, '$.pull_request.base.repo.language') = 'Java'
GROUP by repo.name
ORDER BY
  count(JSON_EXTRACT_SCALAR(payload, '$.pull_request.base.repo.stargazers_count')) DESC
LIMIT
  100

Может кто-нибудь проверить это со мной при добавлении нового столбца с URL репо.

1 Ответ

1 голос
/ 24 января 2020

Это хорошее начало, но учтите, что у вас есть запрос, который превышает 1 ТБ данных и быстро израсходует вашу месячную бесплатную квоту.

Я рекомендую вам начать с извлечения всех интересных строк (например, Java связанных) к новой таблице. Затем запустите ваши будущие запросы из таблицы меньшего размера.

Этот запрос даст вам нужные результаты:

SELECT repo.name
  , MAX(CAST(JSON_EXTRACT_SCALAR(payload, '$.pull_request.base.repo.stargazers_count')AS INT64)) stars
FROM `githubarchive.month.201912`  
WHERE JSON_EXTRACT_SCALAR(payload, '$.pull_request.base.repo.language') = 'Java'
AND type='PullRequestEvent'
GROUP by repo.name
ORDER BY stars DESC

enter image description here

  • Я смотрю только на репо, в которых были запросы на извлечение в декабре 2019 года. Это может быть хорошим признаком того, что репо живо.

  • Поскольку я только если посмотреть на декабрь, стоимость запроса составляет 1/12.

  • MAX() дает вам общее количество звезд на момент запроса извлечения.

Теперь позвольте мне создать и поделиться с вами таблицей меньшего размера, чтобы получить самые популярные репозитории по языкам:

CREATE TABLE `fh-bigquery.github_extracts.201912_repo_lang_stars`
AS
  SELECT repo.name
    , MAX(CAST(JSON_EXTRACT_SCALAR(payload, '$.pull_request.base.repo.stargazers_count')AS INT64)) stars
    , JSON_EXTRACT_SCALAR(payload, '$.pull_request.base.repo.language') lang
  FROM `githubarchive.month.201912`  
  WHERE type='PullRequestEvent'
  GROUP by repo.name, lang
  # 28.1 sec elapsed, 161.7 GB processed
;

SELECT lang
  , COUNT(*) repos
  , ARRAY_AGG(STRUCT(name, stars) ORDER BY stars DESC LIMIT 3) repo
FROM `fh-bigquery.github_extracts.201912_repo_lang_stars`
GROUP BY lang
ORDER BY repos DESC 
# 1.4 sec elapsed, 52.2 MB processed

enter image description here

enter image description here

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