本文为您介绍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 commits数量。 |
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
是受欢迎程度增长最快的编程语言。