このトピックでは、MaxCompute パブリックデータセットで利用可能な GitHub パブリックイベントデータについて説明します。また、このデータのクエリ方法を説明し、分析結果を含むクエリの例を提供します。
概要
多くの開発者が GitHub 上のオープンソースプロジェクトに取り組んでいます。この作業により、大量のイベントが生成されます。GitHub は、イベントタイプ、詳細、開発者、コードリポジトリなど、各イベントに関する情報を記録します。GitHub は、リポジトリにスターを付ける、コードを送信するなど、パブリックイベントも利用可能にします。イベントタイプの詳細については、「GitHub イベントタイプ」をご参照ください。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 テーブルは、github_events パブリックプロジェクトの BIGDATA_PUBLIC_DATASET スキーマに格納されます。詳細については、「スキーマ操作」をご参照ください。MaxCompute を有効化している場合、クロスプロジェクトアクセスを使用してこれらのテーブルをクエリできます。
テーブルの詳細
dwd_github_events_odps
このファクトテーブルには、各 GitHub パブリックイベントの主な情報が格納されます。これは T+1 時間ごとに更新されます。テーブルには次のフィールドが含まれます:
フィールド名 | データ型 | 説明 |
id | BIGINT | イベント ID。 |
actor_id | BIGINT | イベントイニシエーターの ID。 |
actor_login | string | イベントイニシエーターのログイン名。 |
repo_id | BIGINT | リポジトリ ID。 |
repo_name | String | owner/Repository_name フォーマットのリポジトリ名。 |
org_id | BIGINT | リポジトリが属する組織の ID。 |
org_login | string | リポジトリが属する組織の名前。 |
type | string | イベントタイプ。 タイプと説明の詳細については、「GitHub イベントタイプ」をご参照ください。 |
created_at | DATETIME | イベントが発生した時間。 |
action | string | イベントの動作。 |
iss_or_pr_id | BIGINT | issue または pull_request ID。 |
number | BIGINT | issue または pull_request の序数。 |
comment_id | BIGINT | コメント ID。 |
commit_id | string | コミット ID。 |
member_id | BIGINT | メンバー ID。 |
rev_or_push_or_rel_id | BIGINT | レビュー、プッシュ、またはリリース ID。 |
ref | string | 作成または削除されたリソースの名前。 |
ref_type | String | 作成または削除されたリソースのタイプ。 |
state | string | issue、pull_request、または pull_request_review のステータス。 |
author_association | string | アクターとリポジトリの関係。 |
language | string | マージリクエスト内のコードの言語。 |
merged | boolean | マージが受け入れられたかどうかを示します。 |
merged_at | DATETIME | コードがマージされた時間。 |
additions | BIGINT | コードに追加された行数。 |
deletions | BIGINT | コードから削除された行数。 |
changed_files | BIGINT | プルリクエストによって変更されたファイルの数。 |
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 | リポジトリ ID。 |
repo_name | string | owner/Repository_name フォーマットのリポジトリ名。 |
stars | BIGINT | リポジトリのスター数。 |
commits | BIGINT | リポジトリへのコミット数。 |
pushes | BIGINT | リポジトリへのプッシュ数。 |
total_prs | BIGINT | リポジトリのプルリクエストの総数。 |
pr_creators | BIGINT | リポジトリのプルリクエスト作成者の総数。 |
pr_reviews | BIGINT | リポジトリのプルリクエストレビューの総数。 |
pr_reviewers | BIGINT | リポジトリのプルリクエストレビュー担当者の総数。 |
total_issues | BIGINT | リポジトリの issue の総数。 |
forks | BIGINT | リポジトリのスター数。 |
month | string | イベントが発生した月。 たとえば、イベントが 2015 年 10 月に発生した場合、このパラメーターの値は |
このデータがどのように生成されるかについては、「GitHub パブリックイベントデータセットに基づく統合オフラインおよびリアルタイムデータ処理」をご参照ください。
特定のオブジェクトを分析するために、MaxCompute は、オープンソースデータベースプロジェクトの ID と名前を含む db_repos テーブルと、オープンソースプログラミング言語プロジェクトの ID と名前を含む programming_language_repos テーブルも格納します。プロジェクトリストは ossinsight から取得されます。
利用可能なリージョン
リージョン | リージョン ID |
中国 (杭州) | cn-hangzhou |
中国 (上海) | cn-shanghai |
中国 (北京) | cn-beijing |
中国 (張家口) | cn-zhangjiakou |
中国 (ウランチャブ) | cn-wulanchabu |
中国 (深圳) | cn-shenzhen |
中国 (成都) | cn-chengdu |
免責事項
MaxCompute が提供する GitHub パブリックイベントデータは、プロダクトテスト専用です。データの正確性は保証されません。このデータを本番環境で使用しないでください。
注意事項
パブリックデータセットは、すべての MaxCompute ユーザーが利用できます。次の点にご注意ください:
パブリックデータセットのデータは
BIGDATA_PUBLIC_DATASETプロジェクトに格納されます。ユーザーはこのプロジェクトのメンバーとして追加されません。したがって、プロジェクトをまたいでデータにアクセスする必要があります。SQL スクリプトを作成するときは、テーブル名の前にプロジェクトとスキーマ名を指定する必要があります。テナントレベルのスキーマ構文が有効になっていない場合は、セッションレベルのスキーマ構文を有効にしてコマンドを実行する必要があります。例:-- セッションレベルのスキーマ構文を有効にします。 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 のデータマップでパブリックデータセットのテーブルを表示することはできません。
パブリックデータセットプロジェクトは、スキーマごとにデータを格納します。アカウントでテナントレベルのスキーマ構文が有効になっていない場合、DataWorks データ分析でパブリックデータセットを直接表示することはできません。SQL 文を実行してデータをクエリすることは引き続き可能です。
MaxCompute を使用して GitHub パブリックイベントデータを探索する
前提条件
MaxCompute が有効化されています。MaxCompute プロジェクトが作成されています。MaxCompute プロジェクトの作成方法の詳細については、「MaxCompute プロジェクトの作成」をご参照ください。
サポートされているツールとプラットフォーム
付録: クエリの例と分析結果
オープンソースデータベースの探索
過去 5 年間 (2018 年から 2022 年) で最も人気のあるオープンソースデータベースプロジェクトのトップ 10 を表示する
クエリの例:
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 年) で最も人気のあるオープンソースデータベースプロジェクトのトップ 10 のランキングの変更を表示する
クエリの例:
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 年間で、トップ 10 のオープンソースデータベースプロジェクトのランキングは変動しました。
clickhouseは最も速い成長を示し、2018 年の 10 位から 2021 年には 1 位に上昇しました。2022 年には、着実に上昇していたredisに追い抜かれました。対照的に、taosdata/TDengineは 2019 年に 1 位でしたが、1 年以内に 9 位に落ちました。
過去 5 年間 (2018 年から 2022 年) で最も人気のあるオープンソースデータベースプロジェクトのトップ 10 の月間スター増加傾向を表示する
クエリの例:
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 ;分析結果: トップ 10 のオープンソースデータベースプロジェクトの中で、
elasticsearchは一貫して最も人気があります。clickhouseプロジェクトは 2021 年以降、急速な成長を遂げています。
2023 年前半に最も人気があったデータベースはどれか
クエリの例:
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;分析結果: 2023 年前半、
clickhouseが最も人気のあるデータベースであり、prometheusとredisがそれに続きました。
2023 年前半に活発にメンテナンスおよび更新されたデータベースはどれか
クエリの例:
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 年前半に最もアクティブなオープンソースデータベースプロジェクトの主な個人貢献者は誰か
クエリの例:
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は最もアクティブなオープンソースデータベースプロジェクトの主な個人貢献者でした。
プログラミング言語の探索
過去 1 年間で最も使用されたプログラミング言語のトップ 10 を数える
クエリの例:
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 年) で最も人気のあるプログラミング言語プロジェクトのトップ 10 を表示する
クエリの例:
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;分析結果: 過去 5 年間で、最も人気のあるプログラミング言語プロジェクトは
Goで、81,642 個のスターを獲得しました。それに続いてTypeScriptとNodeがありました。
過去 5 年間 (2018 年から 2022 年) で最も人気のあるプログラミング言語プロジェクトのトップ 10 の月間スター増加傾向を表示する
クエリの例:
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は人気が最も急速に成長したプログラミング言語プロジェクトでした。