ClickHouse 23.7 版本发布说明

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: 本文描述了部分特别值得我们重点关注的新功能。但值得注意的是,现在有几个功能已经在生产环境就绪,或处于默认启用的状态。您可以在这篇文章的末尾找到它们。

发布摘要

新增了 31 个功能

实现了 16 个性能优化修复了 47 处bug


本文描述了部分特别值得我们重点关注的新功能。但值得注意的是,现在有几个功能已经在生产环境就绪,或处于默认启用的状态。您可以在这篇文章的末尾找到它们。



新贡献者

特别欢迎所有23.7版本的新贡献者!ClickHouse的流行在很大程度上要归功于为社区做出贡献的贡献者们的努力。社区的茁壮成长总是令所有人都非常振奋。


如果你看到你的名字出现在下面的清单中,请联系我们...我们也会在Twitter等地方,等待你的联系。


Alex Cheng, AlexBykovski, Chen768959, John Spurlock, Mikhail Koviazin, Rory Crispin, Samuel Colvin, Sanjam Panda, Song Liyong, StianBerger, Vitaliy Pashkov, Yarik Briukhovetskyi, Zach Naimon, chen768959, dheerajathrey, lcjh, pedro.riera, therealnick233, timfursov, velavokr, xiao, xiaolei565, xuelei, yariks5s



Parquet写入的改进

(Michael Kolupaev)

近几个月我们看到了ClickHouse在Parquet文件格式上的多项读取改进。除了跨行组并行读取和使用元数据进行过滤外,我们甚至还花时间确保在Hugging Face数据集上的查询是优化的。我们知道这种文件格式无处不在,对于像使用clickhouse-local进行本地分析和数据迁移这样的任务至关重要。我们持续的提高我们对Parquet的支持和对速度的追求,已经在我们公开的基准测试中得到了回报。


image.png


当然,读取Parquet只是故事的一半。用户不可避免地需要将ClickHouse数据写入Parquet,通常作为反向ETL工作流的一部分或需要分享数据分析的结果。因此,我们很高兴地宣布,从23.7版本开始,Parquet的写入速度现在快了6倍。


让我们使用英国房价数据的例子来说明。下面,我们使用 clickhouse-local 并从一个已经公开托管在S3上的Parquet文件中导入数据。


CREATETABLE uk_house_price
ENGINE = MergeTree
ORDERBY(postcode1, postcode2, addr1, addr2)SETTINGS allow_nullable_key =1ASSELECT*FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/uk-house-prices/parquet/house_prices.parquet')0 rows inset. Elapsed:40.550 sec. Processed 28.28 million rows,4.67 GB (697.33 thousand rows/s.,115.15 MB/s.)

使用23.6导入此数据集的速度仍然非常快,几乎达到每秒150万行。


SELECT*FROM uk_house_price
INTO OUTFILE 'london-prices.parquet'28276228 rows inset. Elapsed:19.901 sec. Processed 28.20 million rows,4.66 GB (1.42 million rows/s.,233.98 MB/s.)

使用23.7导入相同的数据集有显著的改进,总时间几乎缩短了一半!实际效果可能会有所不同,但我们观察到的改进效果高达6倍。


SELECT*FROM uk_house_price
INTO OUTFILE 'london-prices.parquet'28276228 rows inset. Elapsed:11.649 sec. Processed 28.24 million rows,4.66 GB (2.42 million rows/s.,400.39 MB/s.)




默认启用的稀疏列

(Anton Popov)

ClickHouse支持稀疏列已经有一段时间了,但在23.7之前需要明确启用。这个优化旨在减少某列写入的总数据,当检测到大量的默认值时,动态地改变编码格式。除了提高压缩率,这还有助于提高查询性能和内存效率。


在23.7中,此功能默认启用。当可以应用这种编码时,用户应该立即看到压缩和性能的提升。


当写入数据Part时(无论是在插入还是合并时),ClickHouse会计算每一列的默认值的比率。如果这超过了配置的阈值,那么只有非默认的值会被写入该列。为了保留哪些行具有默认值,会写入一个单独的流,其中包含偏移量的编码。在查询时会组合这些信息,确保这种优化对用户是完全透明的。以下的图示展示了这方面的一个例子:


image.png


对于一个包含稀疏值的①列 s ,ClickHouse只将非默认值写入磁盘上的②列文件,并与③一个包含非默认值偏移量的稀疏编码文件一起:对于每一个非默认值,我们存储在这个非默认值之前直接存在的默认值的数量。在查询时,我们从这种编码中创建一个带有直接偏移量的④内存表示。稀疏编码的存储变种包含有重复值的数据。


在23.7之前,用户需要通过修改控制稀疏列编码使用所需的阈值的设置来明确启用稀疏列 - ratio_of_defaults_for_sparse_serialization。这默认值为1.0,实际上禁用了这个特性。在23.7中,这个值默认为0.9375。


尽管我们期望稀疏列能够使结构化数据受益,但我们希望在用户插入非结构化数据的场景下也有益处,例如具有高度可变键的JSON。在这些情况下,用户几乎不会因为只有几行的列有值而支付任何额外的开销 - 这可能带来显著的空间节省。


尽管我们预期在我们的公开ClickBench基准测试中会有所改进,但默认启用这一优化所带来的额外益处是一个令人愉快的惊喜。


image.png




实验性支持PRQL

(由János Benjamin Antal提供)

在ClickHouse,我们坚信SQL是所有查询语言中的教父,它有能力处理几乎所有的数据问题。随着时间的推移,许多语言都试图与SQL竞争或取代SQL,获得了不同程度的成功。新的查询语言迅速出现,但往往也同样迅速地消失。SQL的持久性和其在连续版本中被许多数据存储系统所采纳,证明了其重要性。然而,我们也认识到与用户在熟悉的领域进行互动的重要性,并认识到有些语言比其他语言更适合某些场景。如果我们看到对一个查询语言有足够的采纳和需求,我们会考虑增加支持,并始终欢迎社区的PR!多亏了这样的社区贡献,ClickHouse现在实验性地支持PRQL。


PRQL (Pipelined Relational Query Language) 发音为“Prequel”,定位为“一个简单、强大、流水线式的SQL替代品”。这种流水线式的语法已经变得很受欢迎,并且有一个不断增长的贡献者社区。通过串联转换来形成流水线,复杂的SQL查询可以优雅地组合。在ClickHouse,我们可以看到这种查询构建风格在某些应用中有一些潜在的使用,尤其是在用户进行搜索和发现练习的场景中 - 可能是可观察性?


此外,用户不仅可以查阅详细的文档,还可以在公共环境进行实验(https://prql-lang.org/playground/)。让我们考虑使用英国房价数据集的几个简单例子。假设希望在伦敦查找最高的区域。

from uk_house_price
filter town =='LONDON'group district (  aggregate {  avg_price = average price
})sort {-avg_price}take 1..10SELECT  district,  AVG(price)AS avg_price
FROM uk_house_price
WHERE town ='LONDON'GROUPBY district
ORDERBY avg_price DESCLIMIT10┌─district───────────────┬──────────avg_price─┐
│ CITY OF LONDON        │  2016389.321229964│ CITY OF WESTMINSTER   │  1107261.809839673│ KENSINGTON AND CHELSEA │ 1105730.3371717487│ CAMDEN                │  752077.7613715645│ RICHMOND UPON THAMES   │  644835.3877018511│ HAMMERSMITH AND FULHAM │  590308.6679440506│ HOUNSLOW              │  574833.3599378078│ ISLINGTON             │   531522.146523729│ HARLOW                │              500000│ WANDSWORTH            │  464798.7692006684└────────────────────────┴────────────────────┘
10 rows inset. Elapsed:0.079 sec.

如所示,ClickHouse为我们提供了与PRQL查询编译后等效的SQL语句。


对于不太有经验的SQL用户来说,一个可能更具挑战性的查询是为每个组的特定列找到最高的行。例如,下面我们按价格排序,找到英国每个邮政编码中最昂贵的房子。


from uk_house_price
filter town =='LONDON'filter postcode1 !=''select{  postcode1, street, price
}group postcode1 (  sort {-price}  take 1)sort {-price}take 1..10WITH table_0 AS(SELECT          postcode1,          street,          price
FROM uk_house_price
WHERE(town ='LONDON')AND(postcode1 !='')ORDERBY          postcode1 ASC,          price DESCLIMIT1BY postcode1
)SELECT  postcode1,  street,  price
FROM table_0
ORDERBY price DESCLIMIT10┌─postcode1─┬─street──────────┬─────price─┐
│ W1U     │ BAKER STREET    │ 594300000│ W1J     │ STANHOPE ROW    │ 569200000│ SE1     │ SUMNER STREET   │ 448500000│ E1      │ BRAHAM STREET   │ 421364142│ EC2V    │ GRESHAM STREET  │ 411500000│ SE10    │ WATERVIEW DRIVE │ 400000000│ EC1Y    │ MALLOW STREET   │ 372600000│ SW1H    │ BROADWAY        │ 370000000│ W1S     │ NEW BOND STREET │ 366180000│ EC4V    │ CARTER LANE     │ 337000000└───────────┴─────────────────┴───────────┘
10 rows inset. Elapsed:0.498 sec. Processed 25.32 million rows,574.02 MB (50.83 million rows/s.,1.15 GB/s.)Peak memory usage:60.70 MiB.


上述查询相对于等效的SQL的简洁性相当引人注目。


作为一种编译成SQL的语言,我们很兴奋地看到PRQL是如何发展的,以及它与ClickHouse一起应用于哪些用例。如果您发现PRQL很有用并已经解决了一些问题,请告诉我们!

在这篇文章中,我们展示了如何保持数据符合范式有时可以带来更快的查询,尤其是使用字典时。我们提供了一些简单和复杂的例子,说明在哪些地方字典是有价值的,并得出了一些有用的建议。


云数据库 ClickHouse 版是阿里云提供的全托管 ClickHouse服务,是国内唯一和 ClickHouse 原厂达成战略合作并一方提供企业版内核服务的云产品。 企业版较社区版 ClickHouse 增强支持实时update&delete,云原生存算分离及Serverless 能力,整体成本可降低50%以上,现已开启邀测,欢迎申请体验(链接:https://www.aliyun.com/product/apsaradb/clickhouse

产品介绍(https://www.aliyun.com/product/apsaradb/clickhouse

技术交流群:

image.png

ClickHouse官方公众号:

image.png

相关文章
|
存储 消息中间件 Kafka
ClickHouse 23.8 (LTS) 版本发布说明
以下是ClickHouse 23.8 (LTS) 版本一些亮点功能...这次发布涵盖了向量的算术运算、tuple的连接、cluster/clusterAllReplicas的默认参数、从元数据中计数(对于Parquet来说速度提高了5倍)、文件内跳数(对Parquet有巨大提升)、从对象存储中流式消费数据,等等
|
6月前
|
存储 关系型数据库 数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 多对一和多对多
【6月更文挑战第7天】该文探讨数据模型,比较了“多对一”和“多对多”关系。通过使用ID而不是纯文本(如region_id代替"Greater Seattle Area"),可以实现统一、避免歧义、简化修改、支持本地化及优化搜索。在数据库设计中,需权衡冗余和范式。文档型数据库适合一对多但处理多对多复杂,若无Join,需应用程序处理。关系型数据库则通过外键和JOIN处理这些关系。文章还提及文档模型与70年代层次模型的相似性,层次模型以树形结构限制了多对多关系处理。为克服层次模型局限,发展出了关系模型和网状模型。
60 6
|
6月前
|
XML NoSQL 数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 概念 + 数据模型
【6月更文挑战第5天】本文探讨了数据模型的分析,关注点包括数据元素、关系及不同类型的模型(关系、文档、图)与Schema模式。查询语言的考量涉及与数据模型的关联及声明式与命令式编程。数据模型从应用开发者到硬件工程师的各抽象层次中起着简化复杂性的关键作用,理想模型应具备简洁直观和可组合性。
42 2
|
6月前
|
SQL 人工智能 关系型数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 文档模型中Schema的灵活性
【6月更文挑战第8天】网状模型是层次模型的扩展,允许节点有多重父节点,但导航复杂,需要预知数据库结构。关系模型将数据组织为元组和关系,强调声明式查询,解耦查询语句与执行路径,简化了访问并通过查询优化器提高效率。文档型数据库适合树形结构数据,提供弱模式灵活性,但在Join支持和访问局部性上不如关系型。关系型数据库通过外键和Join处理多对多关系,适合高度关联数据。文档型数据库的模式灵活性体现在schema-on-read,写入时不校验,读取时解析,牺牲性能换取灵活性。适用于不同类型或结构变化的数据场景。
50 0
|
6月前
|
SQL JSON NoSQL
【DDIA笔记】【ch2】 数据模型和查询语言 -- 关系模型与文档模型
【6月更文挑战第6天】关系模型是主流数据库模型,以二维表形式展示数据,支持关系算子。分为事务型、分析型和混合型。尽管有其他模型挑战,如网状和层次模型,但关系模型仍占主导。然而,随着大数据增长和NoSQL的出现(如MongoDB、Redis),强调伸缩性、专业化查询和表达力,关系模型的局限性显现。面向对象编程与SQL的不匹配导致“阻抗不匹配”问题,ORM框架缓解但未完全解决。文档模型(如JSON)提供更自然的嵌套结构,适合表示复杂关系,具备模式灵活性和更好的数据局部性。
54 0
|
6月前
|
敏捷开发 存储 缓存
【DDIA笔记】【ch1】 可靠性、可扩展性和可维护性 -- 可维护性
【6月更文挑战第4天】本文探讨了Twitter面临的一次发推文引发的巨大写入压力问题,指出用户粉丝数分布是决定系统扩展性的关键因素。为解决此问题,Twitter采用混合策略,大部分用户推文扇出至粉丝主页时间线,而少数名人推文则单独处理。性能指标包括吞吐量、响应时间和延迟,其中高百分位响应时间对用户体验至关重要。应对负载的方法分为纵向和横向扩展,以及自动和手动调整。文章强调了可维护性的重要性,包括可操作性、简单性和可演化性,以减轻维护负担和适应变化。此外,良好设计应减少复杂性,提供预测性行为,并支持未来改动。
62 0
|
6月前
|
缓存 关系型数据库 数据库
【DDIA笔记】【ch1】 可靠性、可扩展性和可维护性 -- 可扩展性
【6月更文挑战第3天】可扩展性关乎系统应对负载增长的能力,但在产品初期过度设计可能导致失败。理解基本概念以应对可能的负载增长是必要的。衡量负载的关键指标包括日活、请求频率、数据库读写比例等。推特的扩展性挑战在于"扇出",即用户关注网络的广度。两种策略包括拉取(按需查询数据库)和推送(预计算feed流)。推送方法在推特案例中更为有效,因为它减少了高流量时的实时计算压力。
59 0
|
6月前
|
存储 消息中间件 缓存
【DDIA笔记】【ch1】 可靠性、可扩展性和可维护性 -- part1 可靠性
【6月更文挑战第2天】本书探讨现代数据系统,阐述其在信息社会中的关键作用,包括数据库、缓存、搜索引擎、流处理、批处理和消息队列等组成部分。随着技术发展,工具如Kafka、Spark和Redis等多功能组件使得系统设计更为复杂。面对可靠性、可扩展性和可维护性的挑战,书中强调了容错和韧性的重要性,区分了硬件故障、软件错误和人为错误,并提出了应对措施。可靠性关乎用户数据、企业声誉和生存,因此是系统设计的核心考量。
54 0
硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件
有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的。为了更好的表述封装设计过程,本文描述了CH340G和MAX232芯片封装创建(SOP-16),并将原理图的元器件关联引脚封装。
硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件

热门文章

最新文章