ClickHouse 25.8 版本发布说明

ClickHouse 25.4 Docker单机部署实战:从零搭建到备份恢复 容器化部署正在成为数据库交付的主流方式,它通过镜像封装环境依赖,让一次构建随处运行成为可能。在众多OLAP引擎中,ClickHouse凭借列式存储和极速查询性能广受青睐,而采用Docker进行单机部署,既能快速获得可用实例,又能大幅降低升级和迁移成本。本文从部署选型切入,对比Docker、二进制包与包管理器三种方式的优劣,详细解析clickhouse/clickhouse-server镜像的版本选择、compose文件核心参数、config.d与users.d配置优先级等关键细节,并给出完整的初始化、启动、 阅读详情

图片

本文字数:13006;估计阅读时间:33 分钟

作者:ClickHouse Team

本文在公众号【ClickHouseInc】首发

图片

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

发布概要

ClickHouse 25.8 版本共带来了 45 项新功能 🌻、 47 项性能优化 🏍、 以及 119 个bug修复 🐝。

这一版本的亮点包括:全新的高速 Parquet 读取器、Data Lake 相关的功能增强、支持 Hive 风格分区写入、初步支持 PromQL 查询语法等众多更新!

新晋贡献者

热烈欢迎所有在 25.8 版本中首次贡献的开发者!ClickHouse 社区的蓬勃发展令人感动,我们始终感谢每一位为 ClickHouse 增添力量的贡献者。

以下是本次版本中新加入的贡献者名单:

Alexei Fedotov、Bulat Sharipov、Casey Leask、Chris Crane、Dan Checkoway、Denny(Innervate 的 DBA)、Evgenii Leko、Felix Mueller、Huanlin Xiao、Konstantin Dorichev、László Várady、Maruth Goyal、Nick、Rajakavitha Kodhandapani、Renat Bilalov、Rishabh Bhardwaj、RuS2m、Sahith Vibudhi、Sam Radovich、Shaohua Wang、Somrat Dutta、Stephen Chi、Tom Quist、Vladislav Gnezdilov、Vrishab V Srivatsa、Yunchi Pang、Zakhar Kravchuk、Zypperia、ackingliu、albertchae、alistairjevans、craigfinnelly、cuiyanxiang、demko、dorki、mlorek、rickykwokmeraki、romainsalles、saurabhojha、somratdutta、ssive7b、sunningli、xiaohuanlin、ylw510

Parquet reader v3

贡献者:Michael Kolupaev

虽然 ClickHouse 是围绕其原生 MergeTree 表设计的,但它同样支持直接查询超过 70 种外部数据格式,包括 Parquet、JSON、CSV 和 Arrow 等,无需先导入数据。与多数数据库需要先将外部文件加载成原生格式不同,ClickHouse 可跳过这一步,依然支持完整的 SQL 功能,比如连接查询、窗口函数、170 多种聚合函数等。

在所有这些格式中,Parquet 占据着特殊的位置。它是现代 Lakehouse 表格式(如 Iceberg 和 Delta Lake)的核心存储格式。因此,近年来我们在 Parquet 支持方面持续加大优化力度,目标是让 ClickHouse 成为全球最快的 Parquet 查询引擎。

此次发布带来了全新原生实现的 Parquet 读取器(目前处于实验阶段),相比旧版大幅提速。此前,ClickHouse 的 Parquet 读取依赖 Apache Arrow 库:Parquet 文件会先被解析为 Arrow 格式,然后通过流式传输转换为 ClickHouse 的内存格式进行执行。而新版读取器跳过了这一步,能够直接将 Parquet 文件读取为 ClickHouse 内存格式,从而提升了并发能力和 I/O 效率。

在我们内部,这个项目被戏称为“另一个 Parquet 读取器”,因为这已经是第三个版本。第一次尝试(input_format_parquet_use_native_reader)启动后未能完成;第二次(v2)提交了 Pull Request 但没有合并。而这次,v3 终于正式落地,实现了完整集成的原生 Parquet 读取器。

那么这个新版读取器到底带来了什么?答案是:更强的并行能力与更高效的 I/O 性能。

并行能力提升

下图(摘自我们之前的深度解析(https://clickhouse.com/blog/clickhouse-and-parquet-a-foundation-for-fast-lakehouse-analytics))展示了 Parquet 文件在磁盘上的物理结构:

图片

我们在这里不会展开太多细节(建议阅读我们的深度解析了解更多),这里只做简要说明:

Parquet 文件采用分层结构:

① 行组(Row groups)—— 水平分区,通常包含约 100 万行,或约 500 MB 的数据。  

② 列块(Column chunks)—— 垂直切片,每个行组中每一列对应一个列块。  

③ 页面(Pages)—— 最小的存储单元,约为 1 MB 大小,存储经过编码的值。

基于这种结构,ClickHouse 能够将 Parquet 查询任务在多个 CPU 核心上并行执行。

旧版读取器已经支持并行扫描多个行组,但新版进一步优化:它不仅可以并行处理整个行组,还能在同一个行组内部并发读取多个列,在行组数量较少的情况下也能充分利用 CPU 资源。

此外,ClickHouse 引擎在查询执行的每个阶段(如过滤、聚合、排序)都已实现并行化,因此新版读取器能够自然融入整个端到端的并行执行模型:

图片

① 预取线程(Prefetch threads)—— 并行加载多个列  

② 解析线程(Parsing threads)—— 并行解码各列数据  

③ 文件流处理(File streams)—— 同时处理多个 Parquet 文件  

④ 执行通道(Processing lanes)—— 多核并行执行过滤、聚合和排序操作

需要特别指出的是,新版读取器的预取机制更加智能:它运行在独立的线程池中,仅加载真正需要的数据。例如,非 PREWHERE 子句所涉及的列会在 PREWHERE 执行完成、明确哪些页面需要读取之后再进行预取,从而避免了无效的数据读取。(下一节我们将详细讲解 PREWHERE。)

Parquet 数据的并行处理显著提升了查询性能,但影响性能的另一个关键因素是读取数据的总量。在这方面,新版 Parquet 读取器也做得更高效!

I/O 效率提升 

并行处理可以提升查询速度,而更智能的过滤机制则能在源头减少需要处理的数据量。

下图展示了 Parquet 文件中用于数据过滤的元数据结构:

图片

① 字典(Dictionaries)—— 用于低基数字段的唯一值映射  

② 页面级统计信息(Page stats)—— 每个页面的最小值和最大值  

③ 布隆过滤器(Bloom filters)—— 每列的辅助信息,用于跳过无关数据

④ 行组统计信息(Row group stats)—— 整个行组的最小值和最大

此前的 ClickHouse Parquet 读取器已经支持基于行组级最小/最大值和布隆过滤器进行跳过读取操作,以减少无效扫描。

而新版原生读取器则进一步加入了页面级最小/最大值过滤支持,并首次引入了 PREWHERE 子句优化,使得数据读取更加精准高效。我们将在下一节中演示这一点。

Parquet 读取器性能

总体来看,新版 Parquet 读取器使 ClickBench (https://benchmark.clickhouse.com/)查询的平均性能提升了 1.81 倍,也就是说,在直接读取 Parquet 文件时的执行速度几乎提升了近一倍:

图片

Demo

为了展示改进后的 parquet 读取器性能,我们将在 ClickBench 使用的数据集上运行一个查询。

Step 1: 创建一个目录,用来存放 ClickBench 匿名化的网站分析数据集(Parquet 格式)(https://clickhouse.com/docs/getting-started/example-datasets/metrica)

mkdir ~/hits_parquet
cd ~/hits_parquet

Step 2: 下载 Parquet 格式的数据集:

wget --continue --progress=dot:giga 'https://datasets.clickhouse.com/hits_compatible/hits.parquet'

Step 3: 下载最新版本的 ClickHouse:

curl https://clickhouse.com/ | sh

Step 4: 以交互模式运行 clickhouse-local:

./clickhouse local

首先,我们用旧版本的 parquet 读取器来运行一个典型的分析查询,该查询涉及 URL 和 EventTime 列:

SELECT URL, EventTime 
FROM file('./hits_parquet/hits.parquet')
WHERE URL LIKE '%google%'
ORDER BY EventTime 
LIMIT 10
FORMAT Null;
0 rows in set. Elapsed: 1.513 sec. Processed 99.57 million rows, 14.69 GB (65.82 million rows/s., 9.71 GB/s.)
Peak memory usage: 1.36 GiB.

可以看到,这次查询扫描并处理了 9957 万行数据,14.69 GB,总耗时 1.513 秒。

接着,我们启用新的 parquet 读取器,再次运行相同的查询:

SELECT URL, EventTime 
FROM file('./hits_parquet/hits.parquet')
WHERE URL LIKE '%google%'
ORDER BY EventTime 
LIMIT 10
FORMAT Null
SETTINGS
    input_format_parquet_use_native_reader_v3 = 1
0 rows in set. Elapsed: 0.703 sec. Processed 14.82 thousand rows, 6.67 MB (21.07 thousand rows/s., 9.48 MB/s.)
Peak memory usage: 1.91 GiB.

这次查询只处理了 4.82K 行数据,6.67 MB,用时 0.703 秒,性能提升约 2 倍。

这种加速得益于页面级别的 min/max 过滤与 PREWHERE 的结合。

  • 利用页面级统计信息,ClickHouse 可以直接跳过那些不可能满足 URL 列 WHERE 条件的整个 Parquet 页面。

  • 而通过 PREWHERE(https://clickhouse.com/docs/optimize/prewhere),ClickHouse 只会在页面粒度上扫描 EventTime 值,用于匹配 URL。

为什么这很重要?

高效的 Parquet 处理是 ClickHouse 作为 Lakehouse 引擎的核心基础。像 Apache Iceberg(以及 Delta Lake、Hudi 等)这样的开放表格式,都依赖 Parquet 作为存储层:

图片

这意味着,每次查询 Iceberg 表时,最终都取决于引擎能否高效地读取和处理 Parquet 文件。

通过加速和优化 Parquet 的读取能力,我们让 ClickHouse 成为数据湖场景的高性能选择:能够在开放格式上,直接发挥出我们原生引擎的极速优势。

支持 Hive 风格分区写入

贡献者:Arthur Passos

ClickHouse 现在支持 Hive 风格的分区写入。这意味着数据会按目录进行拆分,目录结构对应分区键的值。

我们来看看它在 S3 表引擎(https://clickhouse.com/docs/engines/table-engines/integrations/s3#partition-by)中的使用方式。这里我们用 MinIO 在本地测试,所以先安装 MinIO 客户端和服务端:

brew install minio/stable/minio
brew install minio/stable/mc

接着启动服务器:

minio server hive-data

然后创建一个 bucket:

mc alias set minio http://127.0.0.1:9000 minioadmin minioadmin
mc mb minio/taxis

Added `minio` successfully.
Bucket created successfully `minio/taxis`.

接下来,从纽约出租车数据集中下载一些 Parquet 文件:

curl "https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-06.parquet" -o yellow_tripdata_2023-06.parquet

现在,我们创建一张表,并按照 PULocationID 和 DOLocationID 进行分区,分别表示上车和下车地点。

CREATE TABLE taxis
(
    VendorID              Int64,
    tpep_pickup_datetime  DateTime64(6),
    tpep_dropoff_datetime DateTime64(6),
    passenger_count       Float64,
    trip_distance         Float64,
    RatecodeID            Float64,
    store_and_fwd_flag    String,
    PULocationID          Int64,
    DOLocationID          Int64,
    payment_type          Int64,
    fare_amount           Float64,
    extra                 Float64,
    mta_tax               Float64,
    tip_amount            Float64,
    tolls_amount          Float64,
    improvement_surcharge Float64,
    total_amount          Float64,
    congestion_surcharge  Float64,
    airport_fee           Float64
)
ENGINE = S3(
    'http://127.0.0.1:9000/taxis',
    'minioadmin', 'minioadmin',
    format='Parquet', partition_strategy = 'hive'
)
PARTITION BY (PULocationID, DOLocationID);

接着插入这些 Parquet 文件:

INSERT INTO taxis
SELECT *
FROM file('*.parquet');

然后我们就可以像下面这样查询表了:

SELECT DOLocationID, _path, avg(fare_amount)
FROM taxis
WHERE PULocationID = 199
GROUP BY ALL;
┌─DOLocationID─┬─_path───────────────────────────────────────────────────────────────┬─avg(fare_amount)─┐
│           79 │ taxis/PULocationID=199/DOLocationID=79/7368231474740330498.parquet  │             45.7 │
│          163 │ taxis/PULocationID=199/DOLocationID=163/7368231447649320960.parquet │               52 │
│          229 │ taxis/PULocationID=199/DOLocationID=229/7368231455001935873.parquet │             37.3 │
│          233 │ taxis/PULocationID=199/DOLocationID=233/7368231484399812609.parquet │             49.2 │
│           41 │ taxis/PULocationID=199/DOLocationID=41/7368231474941657088.parquet  │             31.7 │
│          129 │ taxis/PULocationID=199/DOLocationID=129/7368231437356498946.parquet │               10 │
│           70 │ taxis/PULocationID=199/DOLocationID=70/7368231504532471809.parquet  │                3 │
│          186 │ taxis/PULocationID=199/DOLocationID=186/7368231493912494080.parquet │             44.3 │
└──────────────┴─────────────────────────────────────────────────────────────────────┴──────────────────┘

数据湖功能改进

贡献者:Konstantin Vedernikov 

ClickHouse 的数据湖功能也有所提升。借助 IcebergS3 表引擎,你现在可以创建 Apache Iceberg 表,执行插入、删除、更新操作,并调整 schema。

首先,使用 IcebergLocal 表引擎创建一张表:

CREATE TABLE demo (c1 Int32) 
ENGINE = IcebergLocal('/Users/markhneedham/Downloads/ice/');

目前对 Iceberg 的写入还处于实验阶段,因此需要设置如下配置:

SET allow_experimental_insert_into_iceberg=1;

插入一些数据:

INSERT INTO demo VALUES (1), (2), (3);

查询这张表:

SELECT * 
FROM demo;

结果如预期,共有三行数据:

┌─c1─┐
│  1 │
│  2 │
│  3 │
└────┘

接下来,删除 c1=3 的那一行:

DELETE FROM demo WHERE c1=3;

再次查询表:

┌─c1─┐
│  1 │
│  2 │
└────┘

很好,那一行已经被删除了!然后修改表的 DDL,新增一列:

ALTER TABLE demo 
ADD column c2 Nullable(String);

再次查询:

┌─c1─┬─c2───┐
│  1 │ ᴺᵁᴸᴸ │
│  2 │ ᴺᵁᴸᴸ │
└────┴──────┘

很好,新列已经创建,所有值都是 null。接着插入一条新数据:

INSERT INTO demo VALUES (4, 'Delta Kernel');

然后第三次查询表:

┌─c1─┬─c2───────────┐
│  4 │ Delta Kernel │
│  1 │ ᴺᵁᴸᴸ         │
│  2 │ ᴺᵁᴸᴸ         │
└────┴──────────────┘

接下来我们更新 c1=1 那一行的 c2 值:

ALTER TABLE demo
 (UPDATE c2 = 'Equality delete' WHERE c1 = 1);

最后再查询一次表:

┌─c1─┬─c2──────────────┐
│  1 │ Equality delete │
│  4 │ Delta Kernel    │
│  2 │ ᴺᵁᴸᴸ            │
└────┴─────────────────┘

我们还可以通过运行以下命令,查看在执行这些操作时 bucket 中生成的底层文件:

$ tree ~/Downloads/ice
/Users/markhneedham/Downloads/ice
├── data
│   ├── 8ef82353-d10c-489d-b1c4-63205e2491e4-deletes.parquet
│   ├── c5080e90-bbee-4406-9c3f-c36f0f47f89f-deletes.parquet
│   ├── data-369710b6-6b9c-4c68-bc76-c62c34749743.parquet
│   ├── data-4297610d-f152-4976-a8aa-885f0d29e172.parquet
│   └── data-b4a9533f-2c6d-4f5f-bff9-3a4b50d72233.parquet
└── metadata
    ├── 50bb92f9-1de1-4e27-98bc-1f5633b71025.avro
    ├── 842076c9-5c9a-476c-9083-b1289285518d.avro
    ├── 99ef0cd6-f702-4e5a-83e5-60bcc37a2dcf.avro
    ├── b52470e3-2c24-48c8-9ced-e5360555330a.avro
    ├── c4e99628-5eb8-43cc-a159-3ae7c3d18f48.avro
    ├── snap-1696903795-2-4ca0c4af-b3a8-4660-be25-c703d8aa88be.avro
    ├── snap-2044098852-2-e9602064-a769-475c-a1ae-ab129a954336.avro
    ├── snap-22502194-2-86c0c780-60a7-4896-9a29-a2317ad6c3f6.avro
    ├── snap-227376740-2-37010387-0c95-4355-abf7-1648282437cd.avro
    ├── snap-326377684-2-0d0d0b37-8aec-41c0-99ce-f772ab9e1f6b.avro
    ├── v1.metadata.json
    ├── v2.metadata.json
    ├── v3.metadata.json
    ├── v4.metadata.json
    ├── v5.metadata.json
    ├── v6.metadata.json
    └── v7.metadata.json

如果要删除 ClickHouse 中的表,可以运行 DROP TABLE demo,但要注意,这不会删除存储 bucket 中的底层表。

此外,数据湖功能还有以下更新:

  • 支持通过 REST 和 Glue catalog 向 Iceberg 表写入数据。

  • 支持在 REST 和 Glue catalog 中对 Iceberg 执行 DROP TABLE。

  • 支持对 Delta Lake 表进行写入和时光回溯。

Unity、REST、Glue 和 Hive Metastore catalog 已经从实验性升级为 beta 状态。

虚拟列 _table 全局可用

贡献者:Xiaozhe Yu

Merge 表函数可以同时查询多张表,并提供 _table 虚拟列,用于跟踪每一行结果来自哪个底层表。现在,这个虚拟列也能在其他查询中使用了。

比如说,我们定义了一张表 foo,如下所示:

CREATE TABLE foo
(
  c1 Int,
  c2 String,
  c3 String
)
ORDER BY c1;

INSERT INTO foo VALUES (7, 'ClickHouse', 'ClickStack');

然后对这张表和 icebergLocal 表函数执行一个查询:

SELECT c1, c2, 
FROM icebergLocal('/Users/markhneedham/Downloads/ice')
UNION ALL
SELECT c1, c2
FROM foo;
┌─c1─┬─c2──────────────┐
│  1 │ Equality delete │
│  7 │ ClickHouse      │
│  4 │ Delta Kernel    │
│  2 │ ᴺᵁᴸᴸ            │
└────┴─────────────────┘

此时我们就可以使用 _table 虚拟列,清楚地知道 UNION ALL 查询中的每一行数据分别来自哪一部分:

SELECT c1, c2, _table
FROM icebergLocal('/Users/markhneedham/Downloads/ice')
UNION ALL
SELECT c1, c2, _table
FROM foo;
┌─c1─┬─c2──────────────┬─_table───────┐
│  7 │ ClickHouse      │ foo          │
│  1 │ Equality delete │ icebergLocal │
│  4 │ Delta Kernel    │ icebergLocal │
│  2 │ ᴺᵁᴸᴸ            │ icebergLocal │
└────┴─────────────────┴──────────────┘

新增 S3 安全特性

贡献者:Artem Brustovetski

本次版本在处理存储于 S3 的数据时,增加了更多安全功能。

你现在可以在 s3 表函数中使用自定义的 IAM 角色:

SELECT * 
FROM s3('s3://mybucket/path.csv', CSVWithNames,
    extra_credentials(role_arn =
'arn:aws:iam::111111111111:role/ClickHouseAccessRole-001'));

同时,也可以针对 S3 中的特定 URL 定义 GRANTS,而不仅仅是针对所有的 S3 bucket:

GRANT READ ON S3('s3://foo/.*') 
TO user;

Arrow Flight 集成支持

贡献者:zakr600, Vitaly Baranov

Arrow Flight(https://arrow.apache.org/docs/format/Flight.html) 是一种高性能数据交换协议,基于 Apache Arrow 的列式内存格式,并通过 gRPC 进行传输。不同于传统的行式协议,Arrow Flight 在传输过程中保持原生的列式存储格式,避免了昂贵的序列化开销,因此尤其适用于分析型工作负载。可以把它看作是 ODBC 或 JDBC 等协议的现代高效替代方案,专门为列式数据处理时代而设计。

ClickHouse 现在已经支持 Arrow Flight 的初始功能,能够在 Arrow Flight 生态系统中同时作为客户端和服务器使用。作为客户端,ClickHouse 可以通过 arrowflight 表函数查询远程的 Arrow Flight 数据源;作为服务器,它可以将数据提供给支持 Arrow Flight 协议的客户端,比如 PyArrow 或其他兼容系统。

这一功能为集成提供了一条新的路径,使 ClickHouse 能够与日益增长的 Arrow 原生工具和应用生态系统互操作。虽然目前仍处于早期阶段,但 Arrow Flight 支持标志着 ClickHouse 正在向更广泛的列式数据处理工作流兼容性迈出第一步。

我们先来看看如何将 ClickHouse 作为 Arrow Flight 服务器来使用。需要先指定运行端口。如果不指定 listen_host,可能会默认尝试监听 IPv6 地址,而这在部分系统上并不受支持。

arrowflight_port: 6379
arrowflight:
  enable_ssl: false
listen_host: "127.0.0.1"

接下来启动 ClickHouse Server:

./clickhouse server

你应该会看到类似下面的输出:

Application: Listening for Arrow Flight compatibility protocol: 127.0.0.1:6379

然后启动 ClickHouse Client:

./clickhouse client

基于纽约出租车数据集创建一张表:

CREATE TABLE taxis
ORDER BY VendorID
AS SELECT *
FROM url('https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-06.parquet')
SETTINGS schema_inference_make_columns_nullable = 0;

完成之后,启动 iPython REPL,并将 pyarrow 作为依赖:

uv run --with pyarrow --with ipython ipython

然后运行以下代码,计算平均小费和乘客数量:

import pyarrow.flight as fl

client = fl.FlightClient("grpc://localhost:6379")
token = client.authenticate_basic_token("default", "")

ticket = fl.Ticket(b"SELECT avg(tip_amount), avg(passenger_count) FROM taxis LIMIT 10")
call_options = fl.FlightCallOptions(headers=[token])

try:
    reader = client.do_get(ticket, call_options)

    table = reader.read_all()
    print("Table shape:", table.shape)
    print("Schema:", table.schema)
    print("nData:")
    print(table)
except Exception as e:
    print(f"Error: {e}")
Table shape: (1, 2)
Schema: avg(tip_amount): double not null
avg(passenger_count): double not null

Data:
pyarrow.Table
avg(tip_amount): double not null
avg(passenger_count): double not null
----
avg(tip_amount): [[3.5949154187456926]]
avg(passenger_count): [[1.327664447087808]]

正如前面提到的,ClickHouse 也可以作为 Arrow Flight 客户端使用。这可以通过 arrowFlight 表函数或 ArrowFlight 表引擎来实现。

接着我们就可以像下面这样去查询 Arrow Flight 服务器:

SELECT * 
FROM arrowflight('localhost:6379', 'dataset');

提供初步的 PromQL 支持

贡献者:Vitaly Baranov

本次版本新增了对 PromQL(Prometheus Query Language)的初步支持。你可以在 ClickHouse 客户端中设置 dialect='promql',并通过 promql_table_name='X' 指定一个时间序列表,然后就可以运行类似下面这样的查询:

rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]

你还可以在 SQL 语句中嵌入 PromQL 查询:

SELECT * 
FROM prometheusQuery('up', ...)

在 25.8 版本中,目前仅支持 rate、delta 和 increase 三个函数。

Azure Blob Storage 性能改进

贡献者:Alexander Sapin

像 AWS S3、GCP 和 Azure Blob Storage 这样的对象存储,本质上都是复杂的分布式系统,各自也有一些“脾气”。延迟问题尤其容易带来麻烦——我们曾观测到偶发的延迟峰值,最高可达 5 秒、10 秒、甚至 15 秒……

几年前,我们通过自研的 HTTP 客户端解决了 AWS 和 GCP 的延迟问题,核心方法包括:

  • 同时使用多个连接访问多个端点

  • 轮换端点以实现更均衡的负载分布

  • 一旦出现软超时,就立即发起第二个请求

  • 通过积极的推测性重试来保障稳定性

现在,我们在 Azure SDK 中也替换了 HTTP 客户端,复用了与 AWS S3 相同的激进重试逻辑,从而解决了 Azure Blob Storage 的延迟问题。

结果是:延迟峰值不复存在!

该优化在默认情况下已启用,如果想切换回之前的实现,可以通过设置 zure_sdk_use_native_client=false 来实现。

征稿启示

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

代谢组+微生物组联合分析实战:从样本处理到生物标志物筛选的完整流程 本文详细介绍了代谢组与微生物组联合分析的全流程,从样本采集、处理到生物标志物筛选的科学实践。重点解析了样本类型匹配、共提取技术、质控协同监控及多维度关联分析方法,帮助研究者系统掌握这一前沿技术,为疾病机制研究和精准医疗提供新视角。 阅读详情

相关推荐

YOLOv8损失函数升级:从CIoU到Wise-IoU v3的实战调优与避坑指南

本文详细介绍了如何将YOLOv8的损失函数从CIoU升级到Wise-IoU v3,以提升目标检测性能,特别是在小目标检测和样本不均衡场景下的表现。通过实战调优步骤和避坑指南,帮助开发者有效应用Wise-IoU v3的动态聚焦机制和单调性控制,显著提升模型精度和训练稳定性。

weixin_33737774的博客 590

chDB 内核升级全记录:ClickHouse 升级至 v25.8.2.29

此次将 ClickHouse 内核从 v24.4 升级至 v25.8.2.29,为 chDB 带来了显著的性能与功能提升。

ClickHouseDB的博客 1114

ABAQUS应用15——Abaqus软件中边界条件与力学中自由度的关系

核心关系:Abaqus通过约束自由度实现边界条件,自由度类型由单元决定。正确设置步骤:确定模型类型(实体/梁/壳)。识别节点的自由度(平动或转动)。根据实际约束施加对应的自由度限制。验证:通过检查变形模式、反力分布等确认边界条件合理性。正确理解自由度与边界条件的关系,是确保有限元模型准确模拟实际物理行为的关键。

George的博客 1544

ClickHouse 24.1 版本发布说明

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

ClickHouseDB的博客 2659

睿思综述智能体:100篇高质量文献一键生成万字长文,还能联网PubMed,科研效率拉满!

对一个主题进行文献综述,是日常科研人绕不过去的工作,无论是写论文前言,综述论文,或者基金申请书的立项依据,需要根据主题,从海量文献中提取相关信息,梳理出清晰的逻辑线,再组织成流畅的文字。4 一键生成万字全文:大纲确认后,它会基于对所有论文的深度理解,逐个章节进行详细撰写,最终生成一篇逻辑连贯、内容翔实、引用规范的万字综述长文,并直接保存为Word(.docx)文件。3 智能撰写大纲:你可以提供自己的大纲,也可以让它根据所有文献内容,智能生成一个逻辑清晰的综述大纲,并支持你在此基础上修改。

dinaxuejie的博客 821

【华为OD机试真题】29、组成最大数 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS)

题目描述 >小组中每位都有一张卡片,卡片上是6位内的正整数,将卡片连起来可以组成多种数字,计算组成的最大数字

KJ.JK 2418

ClickHouse 24.11 版本发布说明

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

ClickHouseDB的博客 1413

【WorkBuddy专栏36】从踩坑到上线——WorkBuddy代码开发避坑指南与部署完全手册

【WorkBuddy专栏36】从踩坑到上线——WorkBuddy代码开发避坑指南与部署完全手册

AI人人懂 1065

高级DBA教你ClickHouse数据库无缝升级版本方法全网最详细

安装包要去官网下载 Clickhouse卸载 rpm -qa | grep clickhouse pm -e clickhouse-client-20.12.5.14-2.noarch rpm -e clickhouse-server-20.12.5.14-2.noarch rpm -e clickhouse-common-static-20.12.5.14-2.x86_64 rm -rf /etc/clickhouse-server/ 重新安装 rpm -ivh clickhouse-common-st

nasen512的博客 2503

6、基因组数据可视化与甲基化分析:从基础操作到深入洞察

本文详细介绍了基因组数据可视化和全基因组DNA甲基化分析的方法和技术,包括基因组查看器(IGV)的基本操作、单核苷酸变异的可视化、DNA甲基化与CpG岛的关联分析、统计建模与显著甲基化区域识别,以及不同细胞系之间的甲基化模式差异分析。通过具体案例展示了如何利用MATLAB进行数据分析和可视化,为基因组研究、疾病机制探索及个性化医疗提供了技术支撑和实践参考。

qsc901234的博客 295

INFFUS 2025 | DDBFusion:基于双重分解和贝塞尔曲线的统一图像分解与融合框架

现有的图像融合算法大多集中于网络架构和损失函数的设计,采用统一的特征提取策略,却忽略了冗余信息和有效信息的划分。然而,对于互补信息而言,统一的特征提取器可能并不适用。因此,本文提出了一种基于贝塞尔曲线图像增强和分层分解的统一图像融合算法,并构建了一个自监督学习任务来学习有意义的信息。其中,贝塞尔曲线旨在模拟不同的图像特征,并构建特殊的自监督学习样本,因此作者的方法不需要特定任务的数据,并且可以在公共自然图像数据集上轻松进行训练。同时,作者的双重分解自监督训练方法可以为模型赋予冗余信息过滤能力。

小白学视觉 308

ClickHouse版本迁移实战:企业级升级与回滚最佳实践

ClickHouse作为现代大数据分析型数据库管理系统,其版本迭代频率高、功能更新快,为企业用户带来性能提升的同时也带来了版本管理的挑战。本文深度解析ClickHouse版本迁移的核心策略,提供生产环境下的实战指南。 ## 版本演进与兼容性挑战 ClickHouse采用双轨发布策略:**稳定版(Stable)** 和 **长期支持版(LTS)**。根据变更日志分析,2025年已发布v25.9至

gitblog_00864的博客 484

在 ABAP 中把变量一次写对:深入理解 FINAL 内联声明与不可变变量

摘要:ABAP中的FINAL声明操作符用于定义不可变变量,强调"当前上下文中的唯一写位置",能有效防止变量被意外修改,提升代码健壮性和可读性。官方建议优先在单次赋值的场景使用FINAL替代DATA。其核心规则包括:1)写位置唯一但可多次执行(如循环内);2)不创建块级作用域;3)对引用变量仅约束引用本身而非对象内容。典型适用场景包括:结果值只读、输入快照保存和中间结果保护。例外情况如游标变量不适用,因需多次写操作。正确使用FINAL可显著降低代码维护风险。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1044

ClickHouse 25.2 版本发布说明

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

ClickHouseDB的博客 1913

WINCC7.3破解文件

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ClickHouse 25.10 版本发布说明

ClickHouse 25.10 版本正式上线,本次更新带来了 20 项新功能 👻、30 项性能优化 🔮 以及 103 个 Bug 修复 🎃

ClickHouseDB的博客 1159

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ClickHouse 25.11 版本发布说明

本次发布新增了 ACME 集成、小型 GROUP BY 的并行合并、投影作为辅助索引等多项实用功能!

ClickHouseDB的博客 997

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ClickHouse 24.10 版本发布说明

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

ClickHouseDB的博客 1746

ClickHouse 23.11 版本发布说明

23.11版本新增25个新功能,实现了24项性能优化,修复了70处bug。

ClickHouseDB的博客 1436

ClickHouse 26.1 版本发布说明

ClickHouse 版本 26.1 包含 25 个新特性 🧤 43 项性能优化 🛷 176 个 bug 修复 ⛄

ClickHouseDB的博客 725

ClickHouse Changelog 条目编写指南:以用户为中心的发布说明写作规范与自动化落地

好的 changelog 条目能让用户快速理解「这次发布带来了什么、对我有什么影响」。本文围绕 ClickHouse 官方编写指南 [docs/changelog_entry_guidelines.md](https://link.gitcode.com/i/fd725caa4a3198e5a9664b84c3f133f8) 展开,结合仓库中的 PR 模板、changelog 自动生成脚本与 CI

gitblog_00260的博客 406

ClickHouse v25.8.6.11-lts 发布解析:路径包含判断、Mutation Patch 与 EmbeddedRocksDB 等五处修复的源码级解读

本篇基于官方 changelog [v25.8.6.11-lts](https://link.gitcode.com/i/9f23722109a870b4e984ad19201ed22e) 展开,逐条解析该 LTS 版本相对 v25.8.5.17-lts 引入的 4 个 Bug Fix 与 1 个内部调整,并结合当前仓库中的源码实现([src/Common/filesystemHelpers.cp

gitblog_00097的博客 508

ClickHouse v25.9.5.21-stable 发布说明深度解析:7 个 Bug 修复的源码级解读

本文以 [v25.9.5.21-stable 变更日志](https://link.gitcode.com/i/2a88fbe0aef680e8bb81e7f8cfd5714d) 为骨架,逐条解读该稳定版中 7 个用户可见的 Bug 修复与 2 个内部改动。你可以从中掌握:Variant 子列读取、HTTP 分块流异常、Replicated 数据库恢复、`loop` 表函数访问控制、UTF-8 字

gitblog_00030的博客 9

ClickHouse v25.8.8.26-lts 版本解读:崩溃日志同步刷新与 9 项关键 Bug 修复全览

本文以 ClickHouse 官方 LTS 分支的补丁版本 v25.8.8.26-lts 的发布记录为核心,逐条解读该版本在崩溃诊断、协议兼容性、权限校验、查询语义确定性等方向上的修复内容,并结合仓库源码说明其底层实现。读完本文,你将了解本次补丁解决了哪些用户可见问题、修复影响哪些模块,以及如何验证与升级到该版本。 ## 版本概览:一个以稳定性为目标的 LTS 补丁 本次发布记录对应的补丁版本

gitblog_00319的博客 63

ClickHouse v25.8.19.20-lts 版本发布详解:LTS 补丁版 14 项缺陷修复与稳定性增强

> 本文以仓库中的官方版本记录 [docs/changelogs/v25.8.19.20-lts.md](https://link.gitcode.com/i/71bb6b538c8cf1e25fffc3ee868c631c) 为主体,结合 ClickHouse 当前仓库源码,逐条解读该 LTS 补丁版本中新增的改进、缺陷修复与构建改进,并说明每项修复背后的底层实现与影响范围,帮助运维与开发者理解

gitblog_00384的博客 24

ClickHouse 补丁发布体检:诊断 AutoReleases 流水线为何静默停发,并手动补齐缺失的补丁版本

ClickHouse 会对其支持版本(最近 3 个大版本 + 最新 LTS)按约两周一次的节奏自动发布 stable **补丁版本**,驱动者是每日调度的 `AutoReleases` 工作流。但这条流水线会"静默卡死":某个未合并的 version-bump PR 或一个失联的自托管 runner 就能让所有分支停发,而不会有任何显式报错。本文以仓库中的技能文档 [.claude/skills/

gitblog_00013的博客 260

ClickHouse v25.8.25.37-lts 发布解读:安全加固、格式解析器健壮性与备份恢复修复全览

v25.8.25.37-lts 是 ClickHouse 25.8 LTS 分支的一个补丁版本(对比基线为 v25.8.24.21-lts),全部变更均通过官方 backport(回移植)机制进入稳定分支。本版的核心主题是**安全与健壮性**:修复了 HTTP 响应头 CRLF 注入、复制表部件获取协议的路径遍历等多个安全漏洞;针对 Arrow、Parquet、ORC、Avro、MsgPack、J

gitblog_00322的博客 12
上一篇: 我们是如何为 ClickHouse 列式存储构建快速 UPDATE 的 Part3/3:基准测试 1000 倍提速
下一篇: AI 上岗:大模型能否接管 SRE 的值班?
ClickHouseDB
博客等级 码龄3年 1707粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值