这是系列文章的第一篇,我们将重点介绍一些很酷的查询,并分享与 ClickHouse 相关的有趣技巧和窍门。在最初的几篇文章中,我们将重点分析使用 ClickHouse 分发的 git-import
工具对 ClickHouse 仓库进行的分析。
简介
在这篇文章中,我们想回馈社区一些见解。Github 存档数据集一直是示例和演示的基础。虽然它是一个很棒的资源,但它并没有在代码级别跟踪仓库的详细信息,例如,提交和代码行更改,而是侧重于问题、星标、PR 和事件。同时,Git insights(通过 pulse)很有趣,但不完整……而探索 ClickHouse 则更有趣。
幸运的是,ClickHouse 分发了一个工具来解决这个问题:git-import
工具。
ClickHouse % clickhouse-git-import -h A tool to extract information from Git repository for analytics. It dumps the data for the following tables: - commits - commits with statistics; - file_changes - files changed in every commit with the info about the change and statistics; - line_changes - every changed line in every changed file in every commit with full info about the line and the information about previous change of this line. The largest and the most important table is "line_changes". Run this tool inside your git repository. It will create .tsv files that can be loaded into ClickHouse (or into other DBMS if you dare).
对于 ClickHouse 仓库,截至 2022 年 11 月 8 日,这会在几分钟内生成以下大小的文件
commits.tsv
- 7.8M - 266,051 行file_changes.tsv
- 53M - 266,051 行line_changes.tsv
- 2.7G - 7,535,157 行
您可以为 Github 上的任何仓库生成此数据(请参阅 linux here),并使用以下问题分析您自己的项目以获得灵感。如果您没有时间自己生成数据,我们将自己的数据加载到了 play.clickhouse.com 中(请注意数据库是 git_clickhouse
),以便我们的社区可以使用示例查询。
已解答的问题
该工具方便地提出了一些可能的问题供您解答。我们已经回答了这些问题,以及其他一些感兴趣的问题,针对 ClickHouse 仓库。您可以在here找到完整的问题列表及其当前答案。请分享您自己对 ClickHouse 和其他仓库的见解,并随时贡献查询和改进!
请注意,有些问题相当广泛且可以有多种解释,因此我们欢迎其他方案。这些数据也旨在用于高级分析目的。由于一些原因(例如,不干净和损坏的提交历史),它可能不精确,这使得一些更精确的查询特别具有挑战性。但是,这不应影响任何高级分析。
在未来的文章中,我们将深入探讨一些具体的查询,并重点介绍 ClickHouse 的一系列功能。现在,我们想提供一个机会来解决该工具建议的问题之一,因为当前答案感觉可以改进……
一个挑战
该工具提出的最具挑战性的查询可能是重建 git blame 命令。提醒一下,git blame
显示当前文件,并使用上次修改该行的修订版本的信息注释给定文件中的每一行。例如,
ClickHouse % git blame src/Storages/StorageReplicatedMergeTree.cpp | head Blaming lines: 100% (8630/8630), done. cdeda4ab915 src/Storages/StorageReplicatedMergeTree.cpp (Alexey Milovidov 2020-04-15 23:28:05 +0300 1) #include cdeda4ab915 src/Storages/StorageReplicatedMergeTree.cpp (Alexey Milovidov 2020-04-15 23:28:05 +0300 2) b40d9200d20 src/Storages/StorageReplicatedMergeTree.cpp (Anton Popov 2022-10-23 03:29:26 +0000 3) #include 210882b9c4d src/Storages/StorageReplicatedMergeTree.cpp (alesapin 2022-10-03 23:30:50 +0200 4) #include 4c391f8e994 src/Storages/StorageReplicatedMergeTree.cpp (Mike Kot 2021-06-20 11:24:43 +0300 5) #include "Common/hex.h" a6ca9f266f1 dbms/src/Storages/StorageReplicatedMergeTree.cpp (Alexey Milovidov 2019-05-03 05:00:57 +0300 6) #include a6ca9f266f1 dbms/src/Storages/StorageReplicatedMergeTree.cpp (Alexey Milovidov 2019-05-03 05:00:57 +0300 7) #include 3e5ef56644b dbms/src/Storages/StorageReplicatedMergeTree.cpp (Alexander Burmak 2019-11-27 12:39:44 +0300 8) #include 3e5ef56644b dbms/src/Storages/StorageReplicatedMergeTree.cpp (Alexander Burmak 2019-11-27 12:39:44 +0300 9) #include 3e5ef56644b dbms/src/Storages/StorageReplicatedMergeTree.cpp (Alexander Burmak 2019-11-27 12:39:44 +0300 10) #include
从提交历史中重建这个特别具有挑战性 - 尤其是在 ClickHouse 当前没有 arrayFold
或 arrayReduce
函数来迭代当前状态的情况下。我们的文档提供了一个适用于高级分析的近似解决方案,但我们希望您可以改进它。
我们将其留给读者解决 - 为第一个提交答案的人提供一件 T 恤 - 在 Twitter 上 @ClickHouse 发推文,发送电子邮件至 [email protected],标题为“git blame solution”,或者直接在文档页面上发起 PR。
一些提示
- 当将您的查询结果与
git-blame
进行比较时,请确保您检出生成此数据集的同一提交 - 如果使用 play,请在此处查看最新的提交。这与此处提供的分布式数据集相同here。 - 另外,请考虑文件可以重命名,因此更改可能会记录在不同的路径下。我们已经通过 UDF 为您解决了这个问题,它可以为您提供完整的更改历史记录。请参阅here。
line_changes
表的每一行都对应一个行更改 - 请参阅line
字段,以及时间和提交。sign
字段指示这些行是插入 (1) 还是删除 (-1)。- 行的插入和删除会导致当时该行之前的所有行的位置分别更改 1 或 -1。
由于提交历史中的问题,对于所有文件来说,完全准确的答案是不太可能的。因此,接近且对数据差异进行合理说明的答案将被接受。如果到 12 月 14 日仍未提交精确的解决方案,则最接近且当前被接受的解决方案将获胜。
对于那些想参与的人来说,ClickHouse Cloud 是解决挑战的绝佳起点 - 启动集群,加载数据,让我们处理基础设施,然后开始查询!
结论
在这篇文章中,我们介绍了 git-import
工具,并提出了一个供我们的社区解决的查询,并提供 T 恤作为奖励!我们鼓励读者探索完整的问题列表和当前答案,并希望我们的社区能从这些数据中找到价值。在未来的文章中,我们将深入探讨一些具体的查询。