本文為您介紹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_odps
和dws_overview_by_repo_month
表格儲存體在MaxCompute產品的公開專案BIGDATA_PUBLIC_DATASET
中的github_events
Schema中(更多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 | 事件發生所在小時。 如 |
month | string | 事件發生所在月份。 如2015年10月,則 |
year | string | 事件發生所在年份。 如2015年, |
ds | string | 事件發生所在的日期。 格式為 |
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月,則 |
如果您對如何產生這些資料感興趣,推薦閱讀基於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
最受歡迎,其次是redis
和prometheus
。
查看過去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年排名第一,短短一年時間下降至第九名。
查看過去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年增速較快。
哪些資料庫在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年上半年最受歡迎,其次是prometheus
和redis
。
哪些資料庫在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
為專案活躍的表現)。
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年上半年,最活躍的開來源資料庫專案中主要的個人貢獻者是
kangkaisen
。
探索程式設計語言
統計過去一年使用最多的十個程式設計語言
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
,其次是TypeScript
和Python
等語言。
查看過去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顆星,其次是TypeScript
和Node
等語言。
查看過去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
是受歡迎程度增長最快的程式設計語言。