Github公开事件数据

本文为您介绍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 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月,则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项目

支持的工具或平台

操作步骤(以SQL分析为例)

  1. 登录MaxCompute控制台,在左上角选择公开数据集可用的地域。

  2. 在左侧导航栏单击工作区 > SQL分析(Beta),进入SQL分析页面。

  3. 单击image.png图标,选择公共数据集DEMO中的样例文件或者自行在SQL代码编辑框输入SQL。

  4. 单击运行参数配置,配置如下参数:

    • 项目:必选项,指定该SQL在哪个项目内执行,因此需要选择当前账号有create instance权限的项目。

    • 计算配额:非必选,即实现作业级别指定Quota。如果要选择,则需要选择当前账号有对应usage权限的Quota;如果不选择,则SQL会在项目配置的默认计算Quota里执行。

  5. 单击运行,在结果页签查看运行结果并进行可视化分析。

    MaxCompute为您提供的Query样例及分析结果请参见附录:Query样例及分析结果

附录: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