发布列车继续前进。
我们非常激动地分享 23.5 版本中的众多精彩功能。
并且,我们已经确定了 23.6 版本的发布日期,请立即注册参加 6 月 29 日上午 9:00(PDT)/ 晚上 6:00(CEST)的社区电话会议。
版本摘要
29 个新功能。22 项性能优化。85 个错误修复。
下面列出了一小部分突出显示的功能。但值得注意的是,一些功能现在已准备好投入生产或已默认启用。您可以在本文末尾找到这些功能。
Azure 表函数(Alexander Sapin,Smita Kulkarni)
ClickHouse 的经验丰富的用户将熟悉 s3 和 gcs 函数。从实现的角度来看,这些函数几乎相同,后者最近添加只是为了让希望查询 Google GCS 的用户更直观。两者都允许用户查询托管在基于 s3 的 blob 存储中的文件,无论是就地查询还是用作数据源以插入到 ClickHouse MergeTree 表中。
虽然 GCS 几乎与 S3 完全互操作,但 Azure 的等效 blob 存储产品在某种程度上偏离了 S3 规范,并且需要更多的工作。
在 23.5 版本中,我们很高兴地宣布 azureBlobStorage 表函数可用于查询 Azure Blob Storage。用户现在可以查询 Azure Blob Storage 中任何受支持格式的文件。此函数在参数上与 S3 和 GCS 函数略有不同,但提供类似的功能。请注意下面我们如何需要指定连接字符串、容器和 blob 路径以符合 Azure Blob 存储概念。在下面的示例中,我们查询英国房价数据集。
SELECT
toYear(toDate(date)) AS year,
round(avg(price)) AS price,
bar(price, 0, 1000000, 80)
FROM azureBlobStorage('https://clickhousepublicdatasets.blob.core.windows.net/', 'ukpricepaid', 'uk_price_paid_*.parquet', 'clickhousepublicdatasets', '<key>')
GROUP BY year
ORDER BY year ASC
┌─year─┬──price─┬─bar(round(avg(price)), 0, 1000000, 80)─┐
│ 1995 │ 67938 │ █████▍ │
│ 1996 │ 71513 │ █████▋ │
│ 1997 │ 78543 │ ██████▎ │
│ 1998 │ 85443 │ ██████▊ │
│ 1999 │ 96041 │ ███████▋ │
│ 2000 │ 107493 │ ████████▌ │
│ 2001 │ 118893 │ █████████▌ │
│ 2002 │ 137958 │ ███████████ │
│ 2003 │ 155894 │ ████████████▍ │
│ 2004 │ 178891 │ ██████████████▎ │
│ 2005 │ 189362 │ ███████████████▏ │
│ 2006 │ 203535 │ ████████████████▎ │
│ 2007 │ 219376 │ █████████████████▌ │
│ 2008 │ 217044 │ █████████████████▎ │
│ 2009 │ 213424 │ █████████████████ │
│ 2010 │ 236115 │ ██████████████████▉ │
│ 2011 │ 232807 │ ██████████████████▌ │
│ 2012 │ 238384 │ ███████████████████ │
│ 2013 │ 256926 │ ████████████████████▌ │
│ 2014 │ 280027 │ ██████████████████████▍ │
│ 2015 │ 297287 │ ███████████████████████▊ │
│ 2016 │ 313551 │ █████████████████████████ │
│ 2017 │ 346516 │ ███████████████████████████▋ │
│ 2018 │ 351101 │ ████████████████████████████ │
│ 2019 │ 352923 │ ████████████████████████████▏ │
│ 2020 │ 377673 │ ██████████████████████████████▏ │
│ 2021 │ 383795 │ ██████████████████████████████▋ │
│ 2022 │ 397233 │ ███████████████████████████████▊ │
│ 2023 │ 358654 │ ████████████████████████████▋ │
└──────┴────────┴────────────────────────────────────────┘
29 rows in set. Elapsed: 9.710 sec. Processed 28.28 million rows, 226.21 MB (2.91 million rows/s., 23.30 MB/s.)
对于任何表函数,在用户希望像查询任何其他表一样查询数据源的使用场景中,公开等效的表引擎通常是有意义的。 如图所示,这简化了后续查询
CREATE TABLE uk_price_paid_azure
ENGINE = AzureBlobStorage('https://clickhousepublicdatasets.blob.core.windows.net/', 'ukpricepaid', 'uk_price_paid_*.parquet', 'clickhousepublicdatasets', '<key>')
SELECT
toYear(toDate(date)) AS year,
round(avg(price)) AS price,
bar(price, 0, 1000000, 80)
FROM uk_price_paid_azure
GROUP BY year
ORDER BY year ASC
┌─year─┬──price─┬─bar(round(avg(price)), 0, 1000000, 80)─┐
│ 1995 │ 67938 │ █████▍ │
│ 1996 │ 71513 │ █████▋ │
│ 1997 │ 78543 │ ██████▎ │
29 rows in set. Elapsed: 4.007 sec. Processed 28.28 million rows, 226.21 MB (7.06 million rows/s., 56.46 MB/s.)
与 S3 和 GCS 函数类似,我们也可以使用这些函数将 ClickHouse 数据写入 Azure Blob 存储容器,从而帮助解决导出和反向 ETL 使用场景。
INSERT INTO FUNCTION azureBlobStorage('https://clickhousepublicdatasets.blob.core.windows.net/', 'ukpricepaid', 'uk_price_paid_{_partition_id}.parquet', 'clickhousepublicdatasets', '<key>') PARTITION BY toYear(date) SELECT * FROM uk_price_paid;
在上面的示例中,我们使用 PARTITION BY
子句和 toYear
函数来创建每年一个 Parquet 文件。
希望此函数能为我们的用户解锁项目。上述函数受到限制,因为它仅在接收节点上执行,从而限制了可以分配给查询的计算级别。为了解决这个问题,我们正在积极开发 azureBlobStorageCluster 函数。这在概念上等同于 s3Cluster,后者通过利用 glob 模式在集群中分布 S3 存储桶中文件的处理。 请继续关注(并参加发布网络研讨会)以获取更新!
我们要感谢 Jakub Kuklis,他在 2021 年贡献了 Azure 的 VFS 级别集成,Kseniia Sumarokova 提供了审查和支持。
ClickHouse Keeper 客户端 (Artem Brustovetskii)
去年,我们发布了 ClickHouse Keeper,为与 ClickHouse 集群协调系统相关的数据提供强一致性存储,这对于使 ClickHouse 能够作为分布式系统运行至关重要。 这支持数据复制、分布式 DDL 查询执行、领导者选举和服务发现等服务。 ClickHouse Keeper 与 ZooKeeper 兼容,ZooKeeper 是 ClickHouse 中用于此功能的旧组件。
ClickHouse Keeper 已准备好投入生产。 ClickHouse Cloud 正在大规模运行 clickhouse-keeper,以支持多租户环境中数千个 ClickHouse 部署。
到目前为止,用户通过使用 nc
或 zkCli.sh
等工具通过 TCP 直接发送命令来与 ClickHouse Keeper 通信。 虽然对于基本调试来说已经足够了,但这使得管理任务的用户体验不太理想,并且远非方便。 为了解决这个问题,在 23.5 版本中,我们引入了 keeper-client
- 一个内置于 ClickHouse 的简单工具,用于自省您的 ClickHouse Keeper。
为了试验客户端,我们可以使用我们最近发布的 docker compose 文件(由我们的支持团队提供),以快速启动多节点 ClickHouse 集群。 在下面的示例中,我们启动了一个包含单个复制分片和 3 个 keeper 实例的 2 节点部署
[email protected]:ClickHouse/examples.git
export CHKVER=23.5
export CHVER=23.5
cd examples/docker-compose-recipes/recipes/cluster_1S_2R/
docker-compose up
上述操作在端口 9181、9182 和 9183 上公开了我们的 keeper 实例。 使用客户端连接非常简单,只需
./clickhouse keeper-client -h 127.0.0.1 -p 9181
/ :) ruok
imok
/ :) ls
clickhouse keeper
/ :)
用户还可以利用 --query
参数(类似于 ClickHouse 客户端)进行 bash 脚本编写。
./clickhouse keeper-client -h 127.0.0.1 -p 9181 --query "ls/"
clickhouse keeper
更多可用选项可以在这里找到。
Parquet 读取速度更快 (Michael Kolupaev)
最近,我们撰写博客介绍了我们在查询 Parquet 文件方面所做的改进。 这些是我们认为使 ClickHouse 成为世界上查询 Parquet 文件最快工具的旅程的开始,无论是通过 ClickHouse Local 还是 ClickHouse Server。 对最近通过利用行组并行读取 Parquet 的努力不满意,23.5 版本增加了进一步的改进。
这些改进中的大多数与通过避免互斥锁来提高并行读取效率的底层工作有关。 正如我们在博客中指出的那样,我们过去还按顺序读取 Parquet 行,这本身限制了读取速度。 现在已消除此限制,默认情况下使用乱序读取。 虽然这预计不会影响大多数用户(除了他们的查询速度更快!),因为分析查询通常不依赖于读取顺序,但如果需要,用户可以通过设置 input_format_parquet_preserve_order = true
恢复到旧的行为。
作为改进的示例,请考虑以下情况:对包含来自早期英国房价数据集的所有行的单个 Parquet 文件执行之前的查询 - 该文件可以从这里下载。
--23.4
SELECT
toYear(toDate(date)) AS year,
round(avg(price)) AS price,
bar(price, 0, 1000000, 80)
FROM file('house_prices.parquet')
GROUP BY year
ORDER BY year ASC
29 rows in set. Elapsed: 0.367 sec.
--23.5
SELECT
toYear(toDate(date)) AS year,
round(avg(price)) AS price,
bar(price, 0, 1000000, 80)
FROM file('house_prices.parquet')
GROUP BY year
ORDER BY year ASC
29 rows in set. Elapsed: 0.240 sec.
对于基于 ClickHouse 中的数据编写 Parquet 文件的用户,有三种主要方法 - 使用 INTO OUTFILE
、INSERT INTO FUNCTION
或简单地将 SELECT FORMAT Parquet
重定向到文件。 从历史上看,我们一直建议用户利用后两种方法,主要是因为 INTO OUTFILE
可能会由于一些不太理想的内部行为而产生非常大的行组大小。 这会影响以后的读取性能。 这可能是一个复杂的调试问题,需要深入了解 Parquet。 幸运的是,此问题现已解决 - 可以随意像使用其他格式一样使用 INTO OUTFILE
!
虽然以上所有内容都代表了重大改进,但此旅程仍未完成。 我们仍然需要进一步改进一些查询 - 特别是查询单个大型 Parquet 文件。 对于那些感兴趣的人,请关注我们在 ClickBench 上针对 Parquet 的开放基准测试。
总结
正如引言中提到的,一些功能现在默认启用或被认为是生产就绪(不再是实验性的)。 特别是,地理数据类型(Point、Ring、Polygon、MultiPolygon)和函数(distance、area、perimeter、union、intersection、convex hull 等)在 23.5 版本中现在已准备好投入生产!
此外,磁盘上的压缩标记和索引(首次在 22.9 版本中提供)现在默认可用。 服务器启动后的第一次查询从未如此之快。
最后但同样重要的是,查询结果缓存现在被认为是“生产就绪”的。 我们在一篇题为ClickHouse 查询缓存简介的文章中详细介绍了该功能。 查询缓存基于这样的想法:有时在某些情况下,可以缓存开销大的 SELECT
查询的结果,以便可以从缓存中直接为同一查询的进一步执行提供服务。
新贡献者
特别欢迎所有 23.5 版本的新贡献者! ClickHouse 的受欢迎程度在很大程度上归功于做出贡献的社区的努力。 看到这个社区成长总是令人感到荣幸。
如果您在这里看到您的名字,请与我们联系……但我们也会在 Twitter 等上找到您。
Alexey Gerasimchuck, Alexey Gerasimchuk, AnneClickHouse, Duyet Le, Eridanus, Feng Kaiyu, Ivan Takarlikov, Jordi, János Benjamin Antal, Kuba Kaflik, Li Shuai, Lucas Chang, M1eyu2018, Mal Curtis, Manas Alekar, Misz606, Mohammad Arab Anvari, Raqbit, Roman Vlasenko, Sergey Kazmin, Sergey Kislov, Shane Andrade, Sorck, Stanislav Dobrovolschii, Val Doroshchuk, Valentin Alexeev, Victor Krasnov, Vincent, Yusuke Tanaka, Ziy1-Tan, alekar, auxten, cangyin, darkkeks, frinkr, ismailakpolat, johanngan, laimuxi, libin, lihaibo42, mauidude, merlllle, ongkong, sslouis, vitac, wangxiaobo, xmy, zy-kkk, 你不要过来啊