全部產品
Search
文件中心

MaxCompute:Github公開事件數目據

更新時間:Dec 11, 2024

本文為您介紹MaxCompute公開資料集中Github公開事件數目據的基本資料、如何通過MaxCompute執行Github公開事件資料查詢以及Query範例和分析結果

簡介

大量開發人員在GitHub上進行開源專案的開發工作,並在專案的開發過程中產生海量事件。GitHub會記錄每次事件的類型及詳情、開發人員、代碼倉庫等資訊,並開放其中的公開事件,包括加星標、提交代碼等,具體事件類型請參見GitHub Events Type。GH Archive專案將GitHub公開事件按小時進行匯總,並允許開發人員訪問,專案具體資訊請參見GH Archive

MaxCompute將GH Archive提供的海量公開事件數目據進行離線處理並開發,產生以下表:

表名稱

表說明

更新周期

dwd_github_events_odps

Github公開事件數目據事實表

T+1小時更新

dws_overview_by_repo_month

Github公開事件月度指標資料彙總表

T+1天更新

dwd_github_events_odpsdws_overview_by_repo_month表格儲存體在MaxCompute產品的公開專案BIGDATA_PUBLIC_DATASET中的github_eventsSchema中(更多Schema資訊見Schema操作)。只要您已開通MaxCompute服務,就可以通過跨專案訪問查詢這些表。

表詳情

dwd_github_events_odps

事實表:儲存了每一條GitHub公開事件的主幹資訊,T+1小時更新。表中包含如下欄位:

欄位名

欄位類型

欄位說明

id

bigint

事件ID。

actor_id

bigint

事件發起人ID。

actor_login

string

事件發起人登入名稱。

repo_id

bigint

repo ID。

repo_name

string

repo名稱:owner/Repository_name。

org_id

bigint

repo所屬組織ID。

org_login

string

repo所屬組織名稱。

type

string

事件類型。

具體類型及描述請參見GitHub Events Type

created_at

datetime

事件發生時間。

action

string

事件行為。

iss_or_pr_id

bigint

issue/pull_request ID。

number

bigint

issue/pull_request 序號。

comment_id

bigint

comment(評論)ID。

commit_id

string

commit(提交記錄)ID。

member_id

bigint

成員ID。

rev_or_push_or_rel_id

bigint

review/push/release ID。

ref

string

建立/刪除的資源名稱。

ref_type

string

建立/刪除的資源類型。

state

string

issue/pull_request/pull_request_review的狀態。

author_association

string

actor與repo之間的關係。

language

string

請求合并代碼的語言。

merged

boolean

是否接受合并。

merged_at

datetime

代碼合并時間。

additions

bigint

代碼增加行數。

deletions

bigint

代碼減少行數。

changed_files

bigint

pull request 改變檔案數量。

push_size

bigint

提交數量。

push_distinct_size

bigint

不同的提交數量。

hr

string

事件發生所在小時。

00點23分,則hr=00

month

string

事件發生所在月份。

如2015年10月,則month=2015-10

year

string

事件發生所在年份。

如2015年,year=2015

ds

string

事件發生所在的日期。

格式為yyyy-mm-dd

dws_overview_by_repo_month

彙總表:儲存了專案維度每月事件指標匯總,T+1天更新。表中包含如下欄位:

欄位名

欄位類型

欄位說明

repo_id

bigint

repo ID。

repo_name

string

repo名稱:owner/Repository_name。

stars

bigint

repo star數量。

commits

bigint

repo commits數量。

pushes

bigint

repo pushes數量。

total_prs

bigint

repo所有的pull_request數量。

pr_creators

bigint

repo所有的pull_request提交者數量。

pr_reviews

bigint

repo所有的pr_reviews數量。

pr_reviewers

bigint

repo所有的pr_reviewers數量。

total_issues

bigint

repo所有的問題數量。

forks

bigint

repo收藏數量。

month

string

事件發生所在月份。

如2015年10月,則month=2015-10

如果您對如何產生這些資料感興趣,推薦閱讀基於GitHub公開事件數目據集的離線即時一體化實踐

為了進行特定對象的分析,MaxCompute還儲存了開來源資料庫專案ID與名稱資訊表db_repos、開源程式設計語言專案ID與名稱資訊表programming_language_repos。(專案名單來源於ossinsight

可用地區

地區

地區ID

華東1(杭州)

cn-hangzhou

華東2(上海)

cn-shanghai

華北2(北京)

cn-beijing

華北3(張家口)

cn-zhangjiakou

華北6(烏蘭察布)

cn-wulanchabu

華南1(深圳)

cn-shenzhen

自南1(成都)

cn-chengdu

聲明

MaxCompute提供的GitHub公開事件數目據只能用於產品測試,不保障資料準確性,因此請您勿用於正式生產。

注意事項

公開資料集對所有的MaxCompute使用者開放。在使用過程中,您需要注意:

  • 公開資料集的資料均儲存在BIGDATA_PUBLIC_DATASET專案中,但所有使用者並未被加入到該專案中,即非專案空間成員。因此需要跨專案訪問資料,在編寫SQL指令碼時,必須在表名前指定專案名稱及Schema名稱。同時未開啟租戶級Schema文法開關的使用者需要開啟Session級Schema文法,才能保證命令正常運行,命令樣本如下:

    --開啟Session級Schema文法
    set odps.namespace.schema=true; 
    --查詢表dwd_github_events_odps中的100條資料
    select * from bigdata_public_dataset.github_events.dwd_github_events_odps where ds='2024-05-10' limit 100;
    重要

    您無需為公開資料集的資料支付儲存費用,但是您需要支付執行查詢語句產生的相應計算費用,費用計算規則請參見計算費用

  • 由於公開資料集需要跨專案訪問,您在DataWorks的資料地圖中無法尋找到公開資料集中的表。

  • 由於公開資料集專案支援按Schema儲存,未開啟租戶層級Schema文法的使用者無法在DataWorks資料分析提供的公開資料集中直接查看,但您依舊可以通過我們提供的SQL語句進行查詢。

使用MaxCompute探索GitHub公開事件數目據

前提條件

已開通MaxCompute並已建立專案,詳情請參見建立MaxCompute專案

支援的工具或平台

附錄:Query範例及分析結果

探索開來源資料庫

查看過去5年(2018~2022)最受歡迎的前十開來源資料庫專案

  • Query範例:

    SET odps.namespace.schema = TRUE;
    SELECT dws.repo_id AS repo_id,
     repos.name AS repo_name,
     SUM(dws.stars) AS stars
    FROM bigdata_public_dataset.github_events.dws_overview_by_repo_month dws
    JOIN bigdata_public_dataset.github_events.db_repos repos ON dws.repo_id = repos.id
    WHERE MONTH >= '2015-01' AND MONTH <='2022-12'
    GROUP BY dws.repo_id,
     repos.name
    ORDER BY stars DESC LIMIT 10;
  • 分析結果:過去5年開來源資料庫專案中elasticsearch最受歡迎,其次是redisprometheusimage.png

查看過去5年(2018~2022)受歡迎Top10開來源資料庫專案熱門排行榜變化

  • Query範例:

    SET odps.namespace.schema = TRUE;
    SET odps.sql.validate.orderby.limit=FALSE;
     WITH tmp as
     (SELECT dws.repo_id AS repo_id, repos.name AS repo_name, SUM(dws.stars) AS stars, SUBSTR(MONTH,1,4) AS YEAR, row_number() over (partition BY SUBSTR(MONTH,1,4)
     ORDER BY SUM(dws.stars) DESC) AS ranknum
     FROM bigdata_public_dataset.github_events.dws_overview_by_repo_month dws
     JOIN bigdata_public_dataset.github_events.db_repos repos ON dws.repo_id = repos.id
     WHERE MONTH>='2018-01'
     GROUP BY dws.repo_id, repos.name,SUBSTR(MONTH,1,4))
    SELECT repo_id,
     repo_name,
     stars,
     ranknum,
     YEAR
    FROM tmp
    WHERE YEAR<=2022
     AND ranknum<=10
    ORDER BY YEAR ASC,ranknum ASC;
  • 分析結果:在過去5年,各開來源資料庫在開發人員心中Top10的地位此起彼伏,其中clickhouse是排名上升最快的專案,從2018年第十名迅速升至2021年的第一名,於2022年被穩步上升的redis超越。反觀taosdata/TDengine在2019年排名第一,短短一年時間下降至第九名。image.png

查看過去5年(2018~2022)最受歡迎的前十開來源資料庫專案獲星按月成長趨勢

  • Query範例:

    set odps.namespace.schema = true;
    set odps.sql.validate.orderby.limit=false;
    WITH top_10_repos AS (
     SELECT
     dws.repo_id as repo_id, 
     repos.name as repo_name, 
     SUM(dws.stars) as stars
     FROM bigdata_public_dataset.github_events.dws_overview_by_repo_month dws
     join bigdata_public_dataset.github_events.db_repos repos on dws.repo_id = repos.id
     where month >= '2018-01' AND MONTH <='2022-12'
     group by dws.repo_id, repos.name
     ORDER BY stars DESC
     LIMIT 10
    ),
    tmp AS (
     SELECT
     month,
     repo_id,
     stars,
     SUM(stars) OVER (partition by repo_id ORDER BY month ASC ) AS total_stars
     FROM bigdata_public_dataset.github_events.dws_overview_by_repo_month
     where month >= '2015-01' and stars is not null
     and repo_id in (select repo_id from top_10_repos)
     group by repo_id,month,stars
     ORDER BY month ASC,repo_id)
     
    SELECT
     tmp.month as month,
     top_10_repos.repo_name as repo_name,
     tmp.total_stars as total_stars
    
     from tmp
     join top_10_repos ON top_10_repos.repo_id = tmp.repo_id
     group by month,repo_name,total_stars
     ORDER BY month ASC,repo_name
    ;
  • 分析結果:Top10開來源資料庫專案中elasticsearch一直是最受歡迎的開來源資料庫,clickhouse自2021年增速較快。

    image.png

哪些資料庫在2023年上半年最受歡迎

  • Query範例:

    set odps.namespace.schema = true;
    SELECT
     repos.name AS repo_name,
     sum(dws.stars) AS stars
    FROM bigdata_public_dataset.github_events.dws_overview_by_repo_month dws
    JOIN bigdata_public_dataset.github_events.db_repos repos ON repos.id = dws.repo_id
    WHERE month >= '2023-01' AND month <= '2023-06'
    GROUP BY repo_name
    ORDER BY stars DESC
    LIMIT 10;
  • 分析結果:clickhouse資料庫在2023年上半年最受歡迎,其次是prometheusredisimage.png

哪些資料庫在2023年上半年保持活躍的維護與更新

  • Query範例:

    set odps.namespace.schema = true;
    SELECT
     repos.name AS repo_name,
     COUNT(dwd.id) AS num
    FROM bigdata_public_dataset.github_events.dwd_github_events_odps dwd
     JOIN bigdata_public_dataset.github_events.db_repos repos ON repos.id = dwd.repo_id
    WHERE type = 'PullRequestEvent'
     AND ds>='2023-01-01' and ds<='2023-06-30'
     AND action = 'opened'
    GROUP BY repos.name
    ORDER BY num DESC
    LIMIT 10;
  • 分析結果:在2023上半年,StarRocks保持最活躍的維護與更新(定義開啟PullRequest為專案活躍的表現)。

    image.png

2023年上半年最活躍的開來源資料庫專案中主要的個人貢獻者是誰

  • Query範例:

    SET odps.namespace.schema=true; 
    WITH a AS 
    (
     SELECT repo_id
     ,repo_name
     ,actor_id
     ,actor_login
     ,COUNT(*) AS contribution
     ,ds
     FROM bigdata_public_dataset.github_events.dwd_github_events_odps
     WHERE ds >='2021-01-01' and ds<='2021-12-31'
     AND (
     (
     type = 'PullRequestEvent'
     AND action = 'opened'
     )
     OR (
     type = 'IssuesEvent'
     AND action = 'opened'
     )
     OR (
     type = 'IssueCommentEvent'
     AND action = 'created'
     )
     OR (
     type = 'PullRequestReviewEvent'
     AND action = 'created'
     )
     OR (
     type = 'PullRequestReviewCommentEvent'
     AND action = 'created'
     )
     OR (
     type = 'PushEvent'
     AND action IS NULL
     )
     )
     GROUP BY repo_id
     ,repo_name
     ,actor_id
     ,actor_login
     ,ds
    )
    SELECT repo_name
     ,actor_login
     ,SUM(contribution) AS contribution
    FROM a
    WHERE repo_name = 'StarRocks/starrocks'
    AND actor_login NOT LIKE '%[bot]'
    AND actor_login NOT LIKE 'cockroach%'
    
    GROUP BY repo_name
     ,actor_login
    ORDER BY contribution DESC
    LIMIT 10
    ;
  • 分析結果:在2023年上半年,最活躍的開來源資料庫專案中主要的個人貢獻者是kangkaisenimage.png

探索程式設計語言

統計過去一年使用最多的十個程式設計語言

  • Query範例:

    SET odps.namespace.schema=true; 
    SELECT
     language,
     count(*) total
    FROM
     bigdata_public_dataset.github_events.dwd_github_events_odps
    WHERE
     ds>=date_add(getdate(), -365)
     AND language IS NOT NULL
    GROUP BY
     language
    ORDER BY
     total DESC
    LIMIT 10;
  • 分析結果:使用最多的程式設計語言是JavaScript,其次是TypeScriptPython等語言。image.png

查看過去5年(2018~2022)最受歡迎的十個程式設計語言專案

  • Query範例:

    SET odps.namespace.schema = TRUE;
    
    SELECT dws.repo_id AS repo_id,
     repos.name AS repo_name,
     SUM(dws.stars) AS stars
    FROM bigdata_public_dataset.github_events.dws_overview_by_repo_month dws
    JOIN bigdata_public_dataset.github_events.programming_language_repos repos ON dws.repo_id = repos.id
    WHERE MONTH >= '2015-01'
    GROUP BY dws.repo_id,
     repos.name
    ORDER BY stars DESC LIMIT 10;
  • 分析結果:過去五年最受歡迎的程式設計語言是Go,收穫了81,642顆星,其次是TypeScriptNode等語言。

    image.png

查看過去5年(2018~2022)最受歡迎的十個程式設計語言專案獲星按月成長趨勢

  • Query範例:

    set odps.namespace.schema = true;
    set odps.sql.validate.orderby.limit=false;
    WITH top_10_repos AS (
     SELECT
     dws.repo_id as repo_id, 
     repos.name as repo_name, 
     SUM(dws.stars) as stars
     FROM bigdata_public_dataset.github_events.dws_overview_by_repo_by_month dws
     join bigdata_public_dataset.github_events.programming_language_repos repos on dws.repo_id = repos.id
     where month >= '2018-01' and month <='2022-12'
     group by dws.repo_id, repos.name
     ORDER BY stars DESC
     LIMIT 10
    ),
    tmp AS (
     SELECT
     month,
     repo_id,
     stars,
     SUM(stars) OVER (partition by repo_id ORDER BY month ASC ) AS total_stars
     FROM bigdata_public_dataset.github_events.dws_overview_by_repo_by_month
     where month >= '2015-01' and stars is not null
     and repo_id in (select repo_id from top_10_repos)
     group by repo_id,month,stars
     ORDER BY month ASC,repo_id)
     
    SELECT
     tmp.month as month,
     top_10_repos.repo_name as repo_name,
     tmp.total_stars as total_stars
    
     from tmp
     join top_10_repos ON top_10_repos.repo_id = tmp.repo_id
     group by month,repo_name,total_stars
     ORDER BY month ASC,repo_name
    ;
  • 分析結果:在過去5年,Go是受歡迎程度增長最快的程式設計語言。image.png