BigQuery: рост репо GitHub из года в год - PullRequest
0 голосов
/ 28 мая 2020

Я создал таблицу для отображения количества звезд на Github по состоянию на 05/2020, используя следующий запрос

SELECT repo.name
, MAX(CAST(JSON_EXTRACT_SCALAR(payload, '$.pull_request.base.repo.stargazers_count')AS INT64)) stars
FROM `githubarchive.month.202005`
GROUP by repo.name
ORDER BY stars DESC
LIMIT 100

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

Спасибо, Данел

1 Ответ

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

См. Инструкции в комментариях в коде.

Особенно важно: я просматриваю дни, а не месяцы для 1/30 отсканированных данных.

Обычно вы захотите чтобы сначала извлечь эти данные в новую таблицу, и тогда вам не нужно будет каждый раз сканировать столько ГБ, чтобы извлечь ежедневное количество звезд.

enter image description here

Решение:

WITH data AS (
  SELECT ANY_VALUE(repo.name) name, repo.id
    , MAX(CAST(JSON_EXTRACT_SCALAR(payload, '$.pull_request.base.repo.stargazers_count')AS INT64)) stars
    , '20'||_table_suffix AS date
  FROM `githubarchive.day.20*` 
  # day instead of month, 1/30th of data scanned
  GROUP by repo.id, date
)

, stars_now AS (
  SELECT ANY_VALUE(name) name, id, MAX(date) date, MAX(stars) stars
  FROM data 
  WHERE date BETWEEN '20200526' AND '20200527' 
  # a couple days to capture projects without activity
  GROUP BY id # names change, ids don't
  ORDER BY stars DESC
  LIMIT 100 # pick the top 100
)

, stars_before AS (
  SELECT id, stars, date
  FROM data 
  WHERE date BETWEEN '20190520' AND '20190527' 
  # a couple days to capture projects without activity
)


SELECT * # everything from stars_now
  , (SELECT MAX(stars) FROM stars_before WHERE a.id=id) stars_before  # an implicit JOIN
FROM stars_now a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...