博客 / 工程

ClickHouse 22.11 版本发布

author avatar
ClickHouse 团队
2022年12月1日 - 7 分钟阅读

22.11 Release.png

又一个月过去了。当然,这意味着又一个 ClickHouse 版本发布了!

22.11 版本来了!

像往常一样,我们每月都会举办版本发布网络研讨会,Alexey 会分享版本的详细信息,赠送一些礼品,并留出时间回答社区问题。不要忘记注册 22.12 版本的研讨会。

如果您有兴趣探索这些功能,22.11 版本已在 ClickHouse Cloud 上提供,这是探索新功能的最佳方式!让我们为您运行 ClickHouse,以便您可以专注于您的应用程序。

版本摘要

15 个新功能。5 项性能优化。32 个错误修复。

如果这还不足以让您有兴趣尝试一下,请查看一些重点内容

  • 复合时间间隔
  • 支持 ** Glob
  • 用于 Spark 兼容性的函数
  • INSERT 重试
  • 通过 Apache Hudi 和 Delta Lake 支持数据湖以进行 SELECT 查询

当然,还有大量的性能改进和集成工作。包括 python 客户端的实质性更改以及 go 和 js 客户端的更新

重试将拯救您的理智

任何进行过大型数据迁移到 ClickHouse 的人都应该对 INSERT 重试功能的加入感到兴奋。在此功能添加之前,由于与 ClickHouse keeper/Zookeeper 的连接问题(例如,由于资源压力或网络中断),大型插入很容易被中断并可能失败。INSERT 中的单个失败块将导致整个请求失败。对于长时间运行的插入,例如使用 remoteSecure 进行数据迁移,这可能会非常令人沮丧,用户需要重置其状态。我们现在添加了设置 insert_keeper_max_retries,它允许插入在重新连接到 keeper 和潜在的重启后继续进行。如果现在 INSERT 期间某个块失败,它将重试。如果成功,INSERT 将照常进行。值 5 应该足够并且涵盖大多数用例。

** Glob 深度解析

有时,我们添加了一个功能,我们的用户会惊讶于它以前竟然不受支持。本月带来了这样一个功能:使用 Glob 模式的递归遍历。我们现在在任何接受路径的表函数中公开了此功能。当从本地存储或 s3 存储桶读取数据以执行文件的临时分析或选择性地将数据插入到您的 ClickHouse 实例中时,我们的大多数用户会发现这特别有价值。

让我们展示一个例子来演示这有多么有用。我们最近发布了一篇博客文章,展示了 git-import 工具(与 ClickHouse 一起分发),该工具可让您为存储库索引提交历史记录 - 有关生成的表的描述,请参阅 此处。我们在 s3 存储桶中免费分发 ClickHouse 和 Linux 存储库的此数据,每个存储库一个文件夹,文件根据其最新年份和月份命名。我们还为每个表维护一个文件。随着时间的推移,我们还可能会在此处添加其他开源存储库。

clickhouse@my-mac ~ % aws s3 ls s3://datasets-documentation/github/commits/ PRE clickhouse/ PRE linux/ clickhouse@my-mac ~ % aws s3 ls s3://datasets-documentation/github/commits/clickhouse/ 2022-11-09 15:16:26 0 2022-11-30 11:53:43 2625584 commits.tsv.xz 2022-11-30 12:06:57 1020 commits_200812.tsv.xz 2022-11-30 12:06:57 268 commits_200901.tsv.xz … 2022-11-30 11:53:54 4755844 file_changes.tsv.xz 2022-11-30 12:06:59 1304 file_changes_200812.tsv.xz 2022-11-30 12:06:59 300 file_changes_200901.tsv.xz … 2022-11-30 11:57:40 135037052 line_changes.tsv.xz 2022-11-30 12:07:01 28396 line_changes_200812.tsv.xz 2022-11-30 12:07:01 472 line_changes_200901.tsv.xz …

维护分层和文件命名策略的好处不仅仅是帮助导航。作为 ClickHouse 用户,它允许您使用 s3 函数定位数据的特定子集,从而减少回答查询所需读取的数据量。Glob 模式现在增强了此功能!

随着 Glob 模式的添加,除了我们现有的支持之外,我们现在还支持使用 ** 模式递归目录

  • 扩展模式,例如 {1..10}
  • 集合匹配,例如 {commits, file-changes}

让我们用上面的数据演示其中的一些功能

按存储库计数提交次数 - 请注意 ** 用于递归并且仅使用提交文件,以及虚拟 _path 列。

SELECT splitByChar('/', _path)[-2] AS repository, count() AS `number of commits` FROM s3('https://datasets-documentation.s3.amazonaws.com/github/commits/**/commits.tsv.xz', 'TSV') GROUP BY _path ┌─repository─┬─number of commits─┐ │ clickhouse │ 62785 │ │ linux │ 1046773 │ └────────────┴───────────────────┘ 2 rows in set. Elapsed: 6.717 sec. Processed 1.11 million rows, 250.11 MB (165.18 thousand rows/s., 37.23 MB/s.)

如果我们计算 2022 年前 6 个月的每月提交次数呢?我们可以应用 WHERE 子句并按时间过滤。这将意味着读取所有数据,这将很慢 - 我们将其留给读者尝试!但是,使用 glob 模式,我们只读取我们需要的内容……

SELECT splitByChar('/', _path)[-2] AS repository, month, count() AS `number of commits` FROM s3('https://datasets-documentation.s3.amazonaws.com/github/commits/**/commits_2022{01..06}.tsv.xz', 'TSV', 'hash String,author LowCardinality(String), time DateTime, message String, files_added UInt32, files_deleted UInt32, files_renamed UInt32, files_modified UInt32, lines_added UInt32, lines_deleted UInt32, hunks_added UInt32, hunks_removed UInt32, hunks_changed UInt32') GROUP BY _path, toStartOfMonth(time) AS month ORDER BY repository ASC, month ASC ┌─repository─┬──────month─┬─number of commits─┐ │ clickhouse │ 2022-01-01 │ 1085 │ │ clickhouse │ 2022-02-01 │ 802 │ │ clickhouse │ 2022-03-01 │ 1099 │ │ clickhouse │ 2022-04-01 │ 1188 │ │ clickhouse │ 2022-05-01 │ 1541 │ │ clickhouse │ 2022-06-01 │ 1243 │ │ linux │ 2022-01-01 │ 5374 │ │ linux │ 2022-02-01 │ 6768 │ │ linux │ 2022-03-01 │ 5919 │ │ linux │ 2022-04-01 │ 7232 │ │ linux │ 2022-05-01 │ 7105 │ │ linux │ 2022-06-01 │ 6404 │ └────────────┴────────────┴───────────────────┘ 12 rows in set. Elapsed: 3.501 sec. Processed 32.25 thousand rows, 4.95 MB (9.21 thousand rows/s., 1.41 MB/s.)

最后,让我们使用我们新的集合能力,通过集合过滤器限制为 ClickHouse 和 Linux 提交,看看是否有任何 Kernel 提交者也为 ClickHouse 贡献了代码(我们还使用了一些数组函数来获得乐趣 :) - 是的,还有更自然的方法来解决!)……

WITH commits AS ( SELECT repository, author FROM s3('https://datasets-documentation.s3.amazonaws.com/github/commits/{linux,clickhouse}/commits_*.tsv.xz', 'TSV', 'hash String,author LowCardinality(String), time DateTime, message String, files_added UInt32, files_deleted UInt32, files_renamed UInt32, files_modified UInt32, lines_added UInt32, lines_deleted UInt32, hunks_added UInt32, hunks_removed UInt32, hunks_changed UInt32') GROUP BY splitByChar('/', _path)[-2] AS repository, author ), authors AS ( SELECT groupArrayIf(author, repository = 'linux') AS linux_authors, groupArrayIf(author, repository = 'clickhouse') AS clickhouse_authors FROM commits ) SELECT arrayJoin(arrayIntersect(linux_authors, clickhouse_authors)) AS common_authors FROM authors ┌─common_authors──────┐ │ root │ │ Hui Wang │ │ Dmitry │ │ Matwey V. Kornilov │ │ Salvatore Mesoraca │ │ Ivan Babrou │ │ Robert Schulze │ │ Sergey Kononenko │ │ Anatoly Pugachev │ │ Azat Khuzhin │ │ Ken Chen │ │ Maxim Nikulin │ │ Gabriel │ │ Quanfa Fu │ │ Rafael David Tinoco │ │ Ben │ │ Vladimir │ │ Jiebin Sun │ │ George │ │ Yong Wang │ │ Dmitry Bilunov │ │ Ilya │ └─────────────────────┘

这里的结果有点棘手,因为作者字段(贡献者姓名)不是唯一标识个人的好方法,但我们感谢我们社区中那些真正进入此杰出榜单的人。

随意使用 s3 函数和 glob 模式回答 此处 列出的任何问题。

分享这篇文章

订阅我们的新闻通讯

随时了解功能发布、产品路线图、支持和云产品信息!
正在加载表单...
关注我们
X imageSlack imageGitHub image
Telegram imageMeetup imageRss image
©2025ClickHouse, Inc. 总部位于美国加利福尼亚州湾区和荷兰阿姆斯特丹。