Skip to Content
🦒Web3Research is going alpha testing 🎉
NJU BlockchainGithub Database

GitHub 行为数据库说明

数据本身源自Github Archive项目。 GitHub Archive 是 GitHub 提供的公开事件数据集,记录了 GitHub 上所有用户行为(如提交、问题、拉取请求等,非面板数据)。如果财力足够可以直接选择使用Google BigTable进行查询。本实现将归档数据载入Clickhouse并通过展平优化查询,达到和BigTable一致的查询体验与近似的查询性能。

如果需要当前面板数据可以直接通过仓库对应 API 链接获取;历史面板数据大部分能够通过行为数据进行反推。

具体数据缺陷见 https://option.cv/gharchive-traps/  。缺陷来自于GitHub Archive或GitHub本身,因此即便是BigTable也存在同样数据缺失。


1. 数据模型概述

GitHub Archive 的数据模型以 事件(Event) 为核心,每个事件对应一行数据(Row),包含以下核心 信息:

  • 事件类型(Event Type):事件的分类(如 PushEventCreateEventIssueEvent 等)。
  • 元数据(Metadata):事件的上下文信息(如时间戳、用户信息、仓库信息等)。
  • 事件内容(Payload):事件的具体数据(如提交内容、问题描述、拉取请求详情等)。

2. 数据模型 Schema

当前落地实现使用 ClickHouse 单表展平:每条 GitHub Archive 事件对应一行;将高频过滤/聚合字段(时间、actor/repo/org、public、event_type)拆成独立列,原始事件 JSON 以字符串形式保存在 payload(以及补充字段 other)中。

下面按“列(字段)”逐个解释其含义与常见取值。

2.1 字段逐项说明

字段含义默认值备注
id事件唯一标识-同一事件可能被重放/补采;下游常用 id 参与去重
event_type事件类型(如 PushEventPullRequestEvent-解析 payload 的入口
actor_id事件发起者(actor)ID-按字符串保存以贴近上游 JSON
actor_loginactor 的用户名(login)''缺失时为空字符串
actor_display_loginactor 展示名''某些数据源会提供
actor_gravatar_idactor 的 gravatar id(历史字段)''现代数据中可能经常为空
actor_urlactor 的 API URL''取决于源数据
actor_avatar_urlactor 头像 URL''取决于源数据
repository_id事件关联仓库 ID-
repository_name仓库名(通常为 owner/name''取决于源数据
repository_url仓库 API URL''取决于源数据
org_id组织 ID(若适用)''不适用时为空字符串
org_login组织 login(组织名)''不适用时为空字符串
org_gravatar_id组织 gravatar id(历史字段)''
org_url组织 API URL''不适用时为空字符串
org_avatar_url组织头像 URL''不适用时为空字符串
created_at事件发生时间(UTC)-用于时间窗分析、增量抽取
public是否公开可见-由数据源给出
payload事件 payload(原始 JSON 字符串)-结构随 event_type 变化,详见第 3 节
other其他未展平字段(原始 JSON 字符串)-用于兜底保留额外信息,减少 schema 变更

3. payload 字段说明(对应 GitHub 文档)

payload 保存的是事件的原始 JSON(字符串形式)。它的结构完全由 event_type 决定,因此必须先看事件类型,再决定解析哪些字段

下面按常见事件类型给出“文字解释 + 字段表”。字段路径以 payload JSON 内部的 key 为准(如 commits[].sha 表示 commits 数组里每个元素的 sha)。

3.1 PushEvent

PushEvent 表示向仓库分支或标签推送提交。

字段路径含义类型备注
repository_id发生 push 的仓库 IDInteger
push_idpush 的唯一标识Integer
ref被 push 的完整 refString例如 refs/heads/main
headpush 后 ref 的最新提交 SHAString
beforepush 前 ref 的最新提交 SHAString

3.2 CreateEvent

CreateEvent 表示创建分支、标签或仓库等(以 ref_type 区分)。

字段路径含义类型备注
ref被创建的引用名String例如分支名或 tag 名
ref_type创建对象类型String常见:branch / tag / repository
full_ref完整 refString分支通常为 refs/heads/<branch_name>
master_branch默认分支名String并非总是存在
description仓库描述String创建仓库时更常见
pusher_type推送者类型String例如 user

3.3 DeleteEvent

DeleteEvent 表示删除分支或标签。

字段路径含义类型备注
ref被删除的引用名String分支名或 tag 名
ref_type删除对象类型String常见:branch / tag
full_ref完整 refString分支通常为 refs/heads/<branch_name>
pusher_type推送者类型String例如 user

3.4 ForkEvent

ForkEvent 表示用户 fork 了一个仓库。

字段路径含义类型备注
action动作Stringforked
forkeefork 后创建出的仓库对象Object完整结构见仓库资源定义

3.5 IssuesEvent

该事件表示 issue 被打开/关闭/重新打开/编辑等,通常通过 action 区分动作。

字段路径含义类型备注
action动作Stringopened / closed / reopened
issueissue 对象Object
assignee可选:被指派/取消指派的用户Object
assignees可选:issue 上的 assignees 数组Array
label可选:被添加/移除的 labelObject
labels可选:labels 数组Array

3.6 IssueCommentEvent

该事件表示在 issue(或 PR 作为 issue)下新增/编辑/删除评论。

字段路径含义类型备注
action动作Stringcreated
issueissue 对象Object用于定位评论所属 issue
comment评论对象Object重点字段:id/body/user/created_at

3.7 PullRequestEvent

该事件表示 PR 的生命周期事件(开启、关闭、合并、同步、编辑等)。payload 核心在 actionpull_request 对象。

字段路径含义类型备注
action动作Stringopened / closed / merged / reopened / assigned / unassigned / labeled / unlabeled
numberPR 编号Integer
pull_requestPR 对象Object
assignee可选:被指派/取消指派的用户Object
assignees可选:assignees 数组Array
label可选:被添加/移除的 label(当 action 为 labeled/unlabeled)Object
labels可选:labels 数组(当 action 为 labeled/unlabeled)Array

3.8 CommitCommentEvent

该事件表示对某个 commit 的评论。

字段路径含义类型备注
action动作Stringcreated
commentcommit comment 对象Object

3.9 GollumEvent

该事件表示 Wiki 页面被创建或更新。payload 核心是 pages[] 数组。

字段路径含义类型备注
pages页面变更列表Array
pages[][page_name]页面名String
pages[][title]页面标题String
pages[][summary]可选:页面摘要说明String可为 null
pages[][action]动作Stringcreated / edited
pages[][sha]页面最新提交 SHAString
pages[][html_url]页面 HTML 地址String

3.10 WatchEvent

该事件表示用户 star(关注)仓库。绝大多数情况下 actionstarted

字段路径含义类型备注
action动作Stringstarted

3.11 DiscussionEvent

DiscussionEvent 表示仓库中创建了一个 discussion。

字段路径含义类型备注
action动作Stringcreated
discussiondiscussion 对象Object

3.12 MemberEvent

MemberEvent 表示与仓库协作者相关的事件。

字段路径含义类型备注
action动作Stringadded(表示用户接受仓库邀请)
member被添加的用户对象Object

3.13 PublicEvent

PublicEvent 表示私有仓库被设置为公开。

字段路径含义类型备注
-空 payloadObject官方说明该事件返回空 payload 对象

3.14 PullRequestReviewEvent

PullRequestReviewEvent 表示 PR review 相关事件。

字段路径含义类型备注
action动作Stringcreated / updated / dismissed
pull_requestreview 所属 PR 对象Object
review被影响的 review 对象Object

3.15 PullRequestReviewCommentEvent

PullRequestReviewCommentEvent 表示 PR review comment(diff 评论)相关事件。

字段路径含义类型备注
action动作Stringcreated
pull_request评论所属 PR 对象Object
comment评论对象Object

3.16 ReleaseEvent

ReleaseEvent 表示 release 相关事件。

字段路径含义类型备注
action动作Stringpublished
releaserelease 对象Object

5. 2015 之前的 API 数据简介

github.timeline 是 GitHub 早期的 API 标准(timeline 风格),随后逐步被基于事件的 Event 模型取代。

5.1 通用列

字段含义类型备注
event_type事件类型LowCardinality(String)解析 payload 的入口
created_at事件发生时间(UTC)DateTime(‘UTC’)分区与时间窗过滤的主键之一
public是否公开Bool同 GitHub Archive 定义
payload原始事件 JSON(字符串)String结构随 event_type 变化
other其他未展平字段(字符串)String兜底保留附加信息

5.2 参与者(Actor)字段逐项说明

字段含义类型备注
actor_id参与者 IDString与上游 JSON 一致(字符串化)
actor_type参与者类型LowCardinality(String)User
actor_login用户名(login)String常用主键
actor_url用户 API URLString旧式 REST 路径
actor_name展示名String旧数据中可能为空
actor_blog个人站点String旧字段,噪声较多
actor_company公司String旧字段,非标准化
actor_email邮箱String通常为空或不可靠
actor_avatar_url头像 URLString
actor_gravatar_idGravatar IDString历史字段,现代数据少见
actor_location地理位置String非结构化文本

5.3 仓库(Repository)字段逐项说明

字段含义类型备注
repository_id仓库 IDString
repository_name仓库名(owner/nameString
repository_full_name仓库全名Stringowner/name 等价/近似
repository_url仓库 API URLString旧式 REST 路径
repository_archive_urlArchive 资源 URLString
repository_blobs_urlBlobs 资源 URLString
repository_branches_urlBranches 资源 URLString
repository_clone_urlGit 克隆 URLString
repository_collaborators_urlCollaborators 资源 URLString
repository_comments_urlComments 资源 URLString
repository_commits_urlCommits 资源 URLString
repository_compare_urlCompare 资源 URLString
repository_contents_urlContents 资源 URLString
repository_contributors_urlContributors 资源 URLString
repository_created_at仓库创建时间Nullable(DateTime(‘UTC’))可能为空
repository_default_branch默认分支名String
repository_description仓库描述String非结构化文本
repository_downloads_urlDownloads 资源 URLString旧特性
repository_events_urlEvents 资源 URLString
repository_fork是否为 forkBool
repository_forks_countFork 数Nullable(Int32)旧计数快照
repository_forks_urlForks 资源 URLString
repository_git_commits_urlGit commits URLString
repository_git_refs_urlGit refs URLString
repository_git_tags_urlGit tags URLString
repository_git_urlGit 协议 URLString
repository_has_downloads是否开启下载Nullable(Bool)旧特性
repository_has_issues是否开启 issuesNullable(Bool)
repository_has_pages是否开启 PagesNullable(Bool)
repository_has_projects是否开启 ProjectsNullable(Bool)
repository_has_wiki是否开启 WikiNullable(Bool)
repository_homepage主页String
repository_hooks_urlHooks 资源 URLString
repository_html_url仓库网页 URLString
repository_comment_url单条评论 URL 模板String
repository_issues_urlIssues 资源 URLString
repository_keys_urlKeys 资源 URLString
repository_labels_urlLabels 资源 URLString
repository_language主要语言String旧字段,可能与现代统计不一致
repository_languages_urlLanguages 资源 URLString
repository_master_branchmaster 分支名String历史字段
repository_merges_urlMerges 资源 URLString
repository_milestones_urlMilestones 资源 URLString
repository_mirror_url镜像 URLString已较少使用
repository_notifications_urlNotifications 资源 URLString
repository_open_issues_count开放 issue 数Nullable(Int32)旧计数快照
repository_organization组织名String可能为空
repository_owner所有者String
repository_private是否私有Nullable(Bool)
repository_pulls_urlPulls 资源 URLString
repository_pushed_at最近 push 时间Nullable(DateTime(‘UTC’))
repository_releases_urlReleases 资源 URLString
repository_size仓库大小Nullable(Int32)旧计量
repository_ssh_urlSSH URLString
repository_stargazers_countStar 数Nullable(Int32)旧计数快照
repository_stargazers_urlStargazers 资源 URLString
repository_statuses_urlStatuses 资源 URLString
repository_subscribers_urlSubscribers 资源 URLString
repository_subscription_urlSubscription 资源 URLString
repository_svn_urlSVN URLString历史兼容
repository_tags_urlTags 资源 URLString
repository_teams_urlTeams 资源 URLString
repository_trees_urlTrees 资源 URLString
repository_updated_at最近更新时间Nullable(DateTime(‘UTC’))
repository_watchers_countWatchers 数Nullable(Int32)旧计数快照
repository_integrate_branchintegrate 分支名String历史字段
repository_assignees_urlAssignees 资源 URLString
repository_issue_comment_urlIssue 评论 URL 模板String
repository_issue_events_urlIssue 事件 URLString

注意:许多字段属于旧版 API 或历史语义,计数类与现代事件数据可能不完全一致;*_url 多为旧式 REST 模板,仅用于参考;隐私相关列(如 actor_email)在公开数据中通常为空。

Last updated on