ClickHouse 24.9 版本发布说明

【Clickhouse从入门到精通】第60篇:ClickHouse生态总结与未来展望 ClickHouse系列收官总结 本文作为《ClickHouse从入门到精通》系列的第60篇收官之作,系统回顾了整个系列的知识体系。文章从基础概念到高级应用,全面梳理了ClickHouse的核心技术: 知识体系:完整回顾了60篇文章的知识图谱,包括列式存储原理、MergeTree引擎家族、分布式架构等核心内容 生态工具:详细盘点了ClickHouse的企业版工具、运维监控、数据集成和可视化方案 版本演进:分析了从21.x到24.x的主要版本特性升级 未来趋势:展望了向量化引擎、湖仓一体、AI集成等发展方向 阅读详情

图片

本文字数:7295;估计阅读时间:19 分钟

作者:ClickHouse Team

本文在公众号【ClickHouseInc】首发

图片

又到新版本发布的时间了!

发布概要

本次ClickHouse 24.9 版本包含了23个新功能🎁、14项性能优化🛷、76个bug修复🐛

本次更新亮点包括:可刷新物化视图新增 APPEND 子句、JSON 数据类型支持更多新函数、自动模式推断现在还支持返回 Variant 类型。

欢迎新贡献者

一如既往地欢迎 24.9 版本中的新贡献者!ClickHouse 的受欢迎离不开社区的持续努力,看到这个社区不断壮大,总是让人倍感欣慰。

以下是新加入的贡献者名单:

1on, Alexey Olshanskiy, Alexis Arnaud, Austin Bruch, Denis Hananein, Dergousov, Gabriel Mendes, Konstantin Smirnov, Kruglov Kirill, Marco Vilas Boas, Matt Woenker, Maxim Dergousov, Michal Tabaszewski, NikBarykin, Oleksandr, Pedro Ferreira, Rodrigo Garcia, Samuel Warfield, Sergey (Finn) Gnezdilov, Tuan Pham Anh, Zhigao Hong, baolin.hbl, gao chuan, haozelong, imddba, kruglov, leonkozlowski, m4xxx1m, marco-vb, megao, mmav, neoman36, okunev, siyuan

可刷新物化视图新增 APPEND 功能

贡献者:Michael Kolupaev

可刷新物化视图是一种实验性功能,能够将查询结果存储以便快速读取。在本次发布中,我们新增了 APPEND 功能,使得在更新视图时无需替换整个视图内容,而是直接将新行追加到表末尾。

这个功能的一个典型应用场景是捕获某一时间点的数据快照。假设我们有一个事件表,该表由 Redpanda、Kafka 或其他流数据平台的消息流持续填充。

SELECT *
FROM events
LIMIT 10

Query id: 7662bc39-aaf9-42bd-b6c7-bc94f2881036

┌──────────────────ts─┬─uuid─┬─count─┐
│ 2008-08-06 17:07:19 │ 0eb  │   547 │
│ 2008-08-06 17:07:19 │ 60b  │   148 │
│ 2008-08-06 17:07:19 │ 106  │   750 │
│ 2008-08-06 17:07:19 │ 398  │   875 │
│ 2008-08-06 17:07:19 │ ca0  │   318 │
│ 2008-08-06 17:07:19 │ 6ba  │   105 │
│ 2008-08-06 17:07:19 │ df9  │   422 │
│ 2008-08-06 17:07:19 │ a71  │   991 │
│ 2008-08-06 17:07:19 │ 3a2  │   495 │
│ 2008-08-06 17:07:19 │ 598  │   238 │
└─────────────────────┴──────┴───────┘

在这个数据集中,uuid 列包含 4096 个值。我们可以通过以下查询来找到总计数最高的那些值:

SELECT
    uuid,
    sum(count) AS count
FROM events
GROUP BY ALL
ORDER BY count DESC
LIMIT 10

┌─uuid─┬───count─┐
│ c6f  │ 5676468 │
│ 951  │ 5669731 │
│ 6a6  │ 5664552 │
│ b06  │ 5662036 │
│ 0ca  │ 5658580 │
│ 2cd  │ 5657182 │
│ 32a  │ 5656475 │
│ ffe  │ 5653952 │
│ f33  │ 5653783 │
│ c5b  │ 5649936 │
└──────┴─────────┘

例如,如果我们希望每 10 秒记录一次每个 uuid 的计数,并将这些计数存储在一个新表 events_snapshot 中,events_snapshot 的表结构可以是这样的:

CREATE TABLE events_snapshot (
    ts DateTime32,
    uuid String,
    count UInt64
) 
ENGINE = MergeTree 
ORDER BY uuid;

接下来,我们可以创建一个可刷新物化视图,将数据填充到这个表中:

SET allow_experimental_refreshable_materialized_view=1;

CREATE MATERIALIZED VIEW events_snapshot_mv
REFRESH EVERY 10 SECOND APPEND TO events_snapshot
AS SELECT
    now() AS ts,
    uuid,
    sum(count) AS count
FROM events
GROUP BY ALL;

然后,我们可以查询 events_snapshot 表,以获取某个特定 uuid 随时间变化的计数记录:

SELECT *
FROM events_snapshot
WHERE uuid = 'fff'
ORDER BY ts ASC
FORMAT PrettyCompactMonoBlock

┌──────────────────ts─┬─uuid─┬───count─┐
│ 2024-10-01 16:12:56 │ fff  │ 5424711 │
│ 2024-10-01 16:13:00 │ fff  │ 5424711 │
│ 2024-10-01 16:13:10 │ fff  │ 5424711 │
│ 2024-10-01 16:13:20 │ fff  │ 5424711 │
│ 2024-10-01 16:13:30 │ fff  │ 5674669 │
│ 2024-10-01 16:13:40 │ fff  │ 5947912 │
│ 2024-10-01 16:13:50 │ fff  │ 6203361 │
│ 2024-10-01 16:14:00 │ fff  │ 6501695 │
└─────────────────────┴──────┴─────────┘

Variant 类型的模式推断

贡献者:Shaun Struwig

ClickHouse 现在支持在模式推断中自动使用 Variant 数据类型。这一功能默认关闭,可以通过设置 ``input_format_try_infer_variants`` 来启用。

让我们来看一个示例,了解该功能如何运作。假设我们读取以下文件:

data1.json

{"id": [1], "name": "Mark"}
{"id": "agerty", "name": "Dale"}

文件中,id 字段在第一行是一个整数数组,在第二行是一个字符串。我们可以查询该文件以查看 id 列的类型:

select *, toTypeName(id)
FROM file('data1.json')
SETTINGS input_format_try_infer_variants=1;

┌─id─────┬─name─┬─toTypeName(id)──────────────────────────┐
│ [1]    │ Mark │ Variant(Array(Nullable(Int64)), String) │
│ agerty │ Dale │ Variant(Array(Nullable(Int64)), String) │
└────────┴──────┴─────────────────────────────────────────┘

如果没有启用 input_format_try_infer_variants=1,则会收到以下错误消息:

Received exception:
Code: 636. DB::Exception: The table structure cannot be extracted from a JSON format file. Error:
Code: 53. DB::Exception: Automatically defined type String for column 'id' in row 1 differs from type defined by previous rows: Array(Int64). You can specify the type for this column using setting schema_inference_hints. (TYPE_MISMATCH) (version 24.9.1.3278 (official build)).
You can specify the structure manually: (in file/path/to/24.9/data1.json). (CANNOT_EXTRACT_TABLE_STRUCTURE)

需要注意的是,Variant 类型并不总是会在您预期的地方被推断。例如,如果 id 字段中的值可以被转换为 String 类型,即使 Variant 类型也是可推断的,推断结果仍然会是 String 类型。以下文件就是这种情况:

data2.json

{"id": 1, "name": "Mark"}
{"id": "agerty", "name": "Dale"}
{"id": "2021-01-04", "name": "Tom"}

当运行以下查询时:

select *, toTypeName(id)
FROM file('data2.json')
SETTINGS input_format_try_infer_variants=1;

┌─id─────────┬─name─┬─toTypeName(id)───┐
│ 1          │ Mark │ Nullable(String) │
│ agerty     │ Dale │ Nullable(String) │
│ 2021-01-04 │ Tom  │ Nullable(String) │
└────────────┴──────┴──────────────────┘

id 列会被推断为 Nullable(String),因为所有值都可以被转换为字符串。不过,您仍然可以通过提供提示,将 id 列推断为 Variant 类型:

SET allow_experimental_variant_type=1;

SELECT *, toTypeName(id) 
FROM  file('data2.json') 
SETTINGS schema_inference_hints='id Variant(String, Int64, Date)';

┌─id─────────┬─name─┬─toTypeName(id)───────────────┐
│ 1          │ Mark │ Variant(Date, Int64, String) │
│ agerty     │ Dale │ Variant(Date, Int64, String) │
│ 2021-01-04 │ Tom  │ Variant(Date, Int64, String) │
└────────────┴──────┴──────────────────────────────┘

用于 JSON 数据分析的聚合函数

贡献者:Pavel Kruglov

在 24.8 版本中,我们介绍了新的 JSON 数据类型。这次更新中,我们为 JSON 和 Dynamic 数据类型新增了更多实用函数。以下是一个示例数据集:

data3.json

{"id": 1, "name": "Mark"}
{"id": "agerty", "name": "Dale"}
{"id": "2021-01-04", "name": "Tom"}
{"id": ["1", 2, "3"], "name": "Alexey", "location": "Netherlands"}

首先,distinctJSONPaths 函数可以用来返回唯一的 JSON 路径。

SELECT distinctJSONPaths(json)
FROM file('data3.json', JSONAsObject)
FORMAT Vertical;

Row 1:
──────
distinctJSONPaths(json): ['id','location','location.city','location.country','name']

如果您还想查看类型,可以使用 distinctJSONPathsAndTypes 函数:

SELECT distinctJSONPathsAndTypes(json)
FROM file('data3.json', JSONAsObject)
FORMAT Vertical;

Row 1:
──────
distinctJSONPathsAndTypes(json): {'id':['Array(Nullable(String))','Int64','String'],'location':['String'],'location.city':['String'],'location.country':['String'],'name':['String']}

最后,distinctDynamicTypes 函数可以返回 Dynamic 列中的唯一数据类型。

SELECT distinctDynamicTypes(json.id)
FROM file('data3.json', JSONAsObject)
FORMAT Vertical

Row 1:
──────
distinctDynamicTypes(json.id): ['Array(Nullable(String))','Int64','String']

URL 引擎支持 _headers 列

贡献者:Flynn

现在,查询 url 表函数时,可以通过 _headers 虚拟列访问响应头信息:

SELECT _headers
FROM url(
'https://en.wikipedia.org/w/api.php?action=query&list=recentchanges&rcprop=title%7Cids%7Csizes%7Cflags%7Cuser%7Cuserid%7Ctimestamp&format=json&rcdir=newer'
)
LIMIT 1
FORMAT Vertical;


Row 1:
──────
_headers: {'accept-ranges':'bytes','age':'0','cache-control':'private, must-revalidate, max-age=0','content-disposition':'inline; filename=api-result.json','content-type':'application/json; charset=utf-8','date':'Tue, 01 Oct 2024 15:32:59 GMT','nel':'{ "report_to": "wm_nel", "max_age": 604800, "failure_fraction": 0.05, "success_fraction": 0.0}','report-to':'{ "group": "wm_nel", "max_age": 604800, "endpoints": [{ "url": "https://intake-logging.wikimedia.org/v1/events?stream=w3c.reportingapi.network_error&schema_uri=/w3c/reportingapi/network_error/1.0.0" }] }','server':'mw-api-ext.codfw.main-54d5bc66d9-98km5','server-timing':'cache;desc="pass", host;desc="cp3067"','set-cookie':'WMF-Last-Access=01-Oct-2024;Path=/;HttpOnly;secure;Expires=Sat, 02 Nov 2024 12:00:00 GMT','strict-transport-security':'max-age=106384710; includeSubDomains; preload','transfer-encoding':'chunked','vary':'Accept-Encoding,Treat-as-Untrusted,X-Forwarded-Proto,Cookie,Authorization','x-cache':'cp3067 miss, cp3067 pass','x-cache-status':'pass','x-client-ip':'82.35.72.115','x-content-type-options':'nosniff','x-frame-options':'DENY'}

overlay 函数

如果您需要将字符串片段替换为另一个字符串,overlay 函数让这一过程更为简单。只需提供初始字符串、替换字符串、替换的起始位置以及替换字符的数量即可。

我们可以利用这个函数来表达 chDB 【https://clickhouse.com/docs/en/chdb】的酷炫之处!

SELECT overlay('ClickHouse is cool', 'and chDB are', 12, 2) AS res

┌─res──────────────────────────┐
│ ClickHouse and chDB are cool │
└──────────────────────────────┘

征稿启示

面向社区长期正文,文章内容包括但不限于关于 ClickHouse 的技术研究、项目实践和创新做法等。建议行文风格干货输出&图文并茂。质量合格的文章将会发布在本公众号,优秀者也有机会推荐到 ClickHouse 官网。请将文章稿件的 WORD 版本发邮件至:Tracy.Wang@clickhouse.com

clickhouse集群的安装与部署 阅读详情

相关推荐

CentOS 7 部署 ClickHouse 22.8 LTS 实战指南

ClickHouse 是一款面向 OLAP 场景的高性能列式数据库,其核心优势在于向量化执行引擎与极致压缩比带来的亚秒级分析能力。在企业级生产环境中,CentOS 7 因其长期稳定性与广泛兼容性仍被大量政企、金融及交通监控系统采用,但其较旧的 glibc 2.17、OpenSSL 1.0.2k 和 systemd 219 等组件常导致新版 ClickHouse 安装失败或运行异常。本文聚焦于官方兼容的 22.8.12.1 LTS 版本,详解如何在最小化 CentOS 7 环境中绕过依赖冲突、SELinux

weixin_33862993的博客 523

ClickHouse 24.1 版本发布说明

ClickHouse 在 2024 年的首个新版本发布来了!

ClickHouseDB的博客 2659

海鸥派OpenEuler开发板实战:从烧写到SSH连接的完整指南

本文提供海鸥派OpenEuler开发板从开箱到SSH远程连接的完整实战指南。详细介绍了基于海思SD3403/SS928芯片的算力开发板系统烧写、存储扩容、网络配置等关键步骤,帮助开发者快速上手这款AI边缘计算设备,并实现高效的远程开发与管理。

ruby5的博客 1120

ClickHouse 23.12 版本发布说明

迎接2024年圣诞节后的第一个新版本。

ClickHouseDB的博客 2130

中颖单片机SH79F3213正弦波矢量的电动车小毛驴控制器量产资料

中颖单片机SH79F3213正弦波矢量的电动车小毛驴控制器量产资料 中颖单片机SH79F3213 制作的电动车小毛驴控制器量产资料,已量产十几万片,拿到手即可量产 1、提供原理图 2、提供PCB图 3、提供C语言源代码程序 4、提供清单 ...

m0_69036675的博客 4525

LVGL core disp显示设计(lv_disp.c)

lv_disp.c当前显示页面的配置scr_act在原始的LVGL是以screen的概念存在,但我们还是习惯叫它为一个页面提供获取top_layer、sys_layer、prev_scr图层接口配置主题管理默认的主题管理是递归查找的,实际项目中因此页面的复杂性,虽然也兼容了此主题管理的方案,但还是推荐使用单页面自行管理主题的方案壁纸设置多页面切换的动画支持计算无用户操作时间清理显示缓存。

Bigan(安)的博客 2331

ClickHouse 25.2 版本发布说明

ClickHouse 25.2 版本正式发布,本次更新带来了12项全新功能🐣、15项性能优化🥚、72个bug修复🌷

ClickHouseDB的博客 1913

QT开发技术 [QXlsx 导出大量数据的崩溃大坑]

QXlsx 是一个基于 Qt 框架开发的开源库,用于读写 Excel 文件(.xlsx 格式),无需依赖 Microsoft Office 或第三方库。以下从多个方面为你详细介绍 QXlsx:主要特性读写功能:支持创建、读取和修改 Excel 文件,能处理单元格的数值、公式、格式等基本操作。样式设置:可以设置单元格的字体、颜色、对齐方式、边框等样式,还能创建自定义样式并应用到多个单元格。图表支持:支持创建多种类型的图表,如柱状图、折线图、饼图等,并能对图表的样式和属性进行配置。

weixin_45397344的博客 653

ClickHouse 24.11 版本发布说明

本次ClickHouse 24.11版本包含了9个新功能🎁、15项性能优化🛷、68个bug修复🐛

ClickHouseDB的博客 1413

[最新]MapReduce综合应用案例 — 气象数据清洗

【代码】[最新]MapReduce综合应用案例 — 气象数据清洗。

M_inherit的博客 1014

Arduino、ESP32驱动TEMT6000传感器(光照传感器篇)

TEMT6000是一个三极管类型的光敏传感器,其光照强度和基极的电流成正比。用起来也相当简单,可以简单的连接该传感器的基极到模拟电压输入,通过简单的检测电压值就可以判断当前的光照强度。

不脱发的程序猿 4233

ClickHouse 23.7 版本发布说明

31个新功能、16项性能优化、47项bug修复,本文描述了一小部分特别值得重点关注的新功能

ClickHouseDB的博客 943

华为OD机试双机位C卷:流量波峰 (C/C++/Py/Java/Js/Go)

华为OD机试双机位C卷 流量波峰,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 流量波峰。

qq_45776114的博客 2445

ClickHouse 24.10 版本发布说明

本文字数:13817;估计阅读时间:35 分钟作者:ClickHouse Team本文在公众号【ClickHouseInc】首发又到了新版本发布的时间!本次ClickHouse 24.10 版本包含了🎁、🛷、🐛在本次发布中,clickhouse-local 更加实用,新增了复制和计算器模式。可刷新物化视图已达到生产就绪标准,远程文件支持缓存,表克隆操作也得到了简化。正如往常,我们热烈欢迎所有 24.9 版本中的新贡献者!

ClickHouseDB的博客 1746

多角度模板匹配的模板创建技巧

基于形状的模板匹配多角度创建技巧

manuoo的专栏 3402

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ClickHouse 24.8 LTS 版本发布说明

本文字数:13885;估计阅读时间:35 分钟作者:ClickHouse Team本文在公众号【ClickHouseInc】首发时间飞逝,又到了新版本发布的时刻!本次ClickHouse 24.8 版本包含了🎁、🛷、🐛这个版本是长期支持 (LTS) 版本,发布后将获得长达 12 个月的支持。如果你想了解稳定版本和 LTS 版本的区别,可以查阅文档。本次更新包括全新升级的 JSON 类型、针对时间序列数据的表引擎、Kafka 消息的精准一次性处理,当然也少不了对表连接操作的优化!

ClickHouseDB的博客 2642

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ClickHouse 25.9 版本发布说明

ClickHouse 25.9 版本共带来了 25 项新功能 🍎、 22 项性能优化 🍁、 以及 83 个bug修复 🌿。

ClickHouseDB的博客 1928

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ClickHouse 24.4 版本发布说明

本文字数:13148;估计阅读时间:33 分钟审校:庄晓东(魏庄)本文在公众号【ClickHouseInc】首发新的一个月意味着新版本的发布!发布概要本次ClickHouse 24.4版本包含了🎁、🛷、🐛和往常一样,我们向 24.4 版本中的所有新贡献者表示热烈欢迎!ClickHouse 的受欢迎程度在很大程度上归功于社区的努力。看到社区不断壮大总是令人感到骄傲。

ClickHouseDB的博客 1599

ClickHouse 24.7 版本发布说明

本文字数:8563;估计阅读时间:22 分钟作者:ClickHouse Team本文在公众号【ClickHouseInc】首发时间!又一个月过去了,这意味着又到了发布新版本的时间!本次ClickHouse 24.7 版本包含了🎁、🛷、🐛一如既往,我们特别欢迎所有在 24.7 版本中的新贡献者!ClickHouse 的广受欢迎,很大程度上归功于社区的积极贡献。看到社区不断壮大,总是让人感到谦虚。

ClickHouseDB的博客 1429

ClickHouse 24.5 版本发布说明

本文字数:12168;估计阅读时间:31 分钟审校:庄晓东(魏庄)本文在公众号【ClickHouseInc】首发Meetup活动ClickHouse Shanghai User Group第1届 Meetup 讲师招募中,欢迎讲师在文末扫码报名!发布概要本次ClickHouse 24.5版本包含了🎁、🛷、🐛一如既往,我们对 24.5 版本的所有新贡献者表示特别欢迎!ClickHouse 的受欢迎程度在很大程度上归功于社区的贡献。看到这个社区不断壮大,总是让人感到谦卑。

ClickHouseDB的博客 1343

ClickHouse 26.6 版本发布说明

ClickHouse 26.6 版本共包含 56 项新功能 🌞 79 项性能优化 🏖️ 以及 366 个错误修复 🍦

ClickHouseDB的博客 252

clickhouse24.9.2.42单机版linux安装

/var/log/clickhouse-server/clickhouse-server.err.log/var/log/clickhouse-server/clickhouse-server.log

weixin_41809435的博客 167

ClickHouse 3节点集群安装

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。此示例架构旨在提供可扩展性。它包括三个节点:两个组合的 ClickHouse 加协调(ClickHouse Keeper)服务器,以及第三个仅包含 ClickHouse Keeper 的服务器,以完成三个节点的法定人数。在这个示例中,我们将创建一个数据库、表和一个分布式表,以便能够查询两个节点上的数据。

IT 1万+

ClickHouse 参数设置说明文档

本文档说明如何在 Kubernetes 环境下通过 ClickHouse Operator (CHI) 修改 ClickHouse 参数配置。

喝醉酒的小白 958

【clickhouse】Centos7部署Clickhouse数据库

centos7部署clickhouse,从0都1的过程

u012272367的博客 3213

OpenEuler 22.03 LTS 部署Clickhouse

环境说明:目前已验证: openeuler22.03 LTS SP3,openeuler22.03 LTS SP4clickhouse 版本: 24.9.2。

srebro.cn | 运维小弟 675
上一篇: 使用 ClickHouse 和 Estuary Flow 进行实时 Salesforce 分析
下一篇: 基于 ClickHouse、Apache Arrow 和 Perspective 的流式实时可视化
ClickHouseDB
博客等级 码龄3年 1707粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值