ClickHouse 26.4 版本发布说明:SQL兼容性提升,COUNT DISTINCT更快了!

多维聚合实战:从Pandas透视表到OLAP引擎的系统化数据操作 多维聚合是现代数据分析的核心能力,本质是将扁平数据升维为可切片、钻取、上卷的立体立方体,支撑动态业务洞察。其底层依赖维度建模(如星型模式)与可加性度量设计,技术实现涵盖Pandas pivot_table、Doris、ClickHouse等多层架构选型。关键价值在于统一数据口径、加速自助分析、赋能实时BI看板,广泛应用于电商销售分析、客户分群、区域业绩归因等场景。本文聚焦Multi-Dimensional Aggregation与Data Manipulation在工程落地中的设计权衡、性能陷阱与口径治理实 阅读详情

图片

本文字数:10732;估计阅读时间:27分钟

作者:ClickHouse Team

又是新一月,这意味着又到了发布新版本的时候了!

ClickHouse 26.4 版本包含 39 项新功能 🌷、45 项性能优化 🐇 和 238 个 bug 修复 🐝。

本次发布带来了更多与 SQL 兼容的功能、更快的 COUNT DISTINCT、更美观的 EXPLAIN 等改进!

新贡献者

热烈欢迎所有参与 26.4 版本贡献的新成员!ClickHouse 社区的蓬勃发展令人备受鼓舞,我们由衷感谢所有贡献者,正是他们的付出让 ClickHouse 广受欢迎。

以下是新贡献者的姓名:

Alexander Kuleshov, Alsu, Anton Frost, Aruj Bansal, Asya, ClickGap AI Bot, Denys Melnyk, Diego Gomes Tome, Dustin Healy, Evgeny Kuzin, Farid Adam, Francisco Garcia Florez, Gagan Dhakrey, Gleb Popov, Groene AI, Ivan Mantova, Jaap Elst, Jack Knudson, James Cunningham, JingYanchao, K, Kc Balusu, Matheus Nerone, Michael Russell, MukundaKatta, Nikita Semenov, Pavel Kravtsov, Peng, RenzoMXD, Sergey Veletskiy, Takumi Hara, Timothy Kurniawan, Wenyu Chen, XiaoBinMu, Yuri Fedoseev, ashrithb, asyablue22, dwagner-decix, egor romanov, groeneai, liuguangliang, manerone, nerve-bot, simonhammes, sourcelliu, xiaobin

小提示:如果您好奇我们如何生成此列表,详情请点击此处(https://gist.github.com/gingerwizard/5a9a87a39ba93b422d8640d811e269e9)。

查看媒体链接:https://youtu.be/9lSVy7k2EoI

您也可以查看演示文稿的幻灯片(https://presentations.clickhouse.com/2026-release-26.4/)。

SQL 兼容性:VALUES 作为表表达式、EXTRACT 和 SET TIME ZONE

26.4 版本引入了更多与标准 SQL 语法兼容的功能。我们将仅介绍其中几个,您可以查阅演示文稿幻灯片以了解更多详情(https://presentations.clickhouse.com/2026-release-26.4/?full#16)。

查看媒体链接:https://youtu.be/VE2DHww-Z_k

VALUES 作为表表达式

贡献者:Desel72

首先我们来看 VALUES。在此版本之前,其调用方式如下:

SELECT * 
FROM VALUES((1, 'a'), (2, 'b'), (3, 'c'));
   ┌─c1─┬─c2─┐
1. │  1 │ a  │
2. │  2 │ b  │
3. │  3 │ c  │
   └────┴────┘

而现在,我们也可以将其作为表表达式调用,示例如下:

SELECT * 
FROM (VALUES (1, 'a'), (2, 'b'), (3, 'c'));
   ┌─c1─┬─c2─┐
1. │  1 │ a  │
2. │  2 │ b  │
3. │  3 │ c  │
   └────┴────┘

我们现在还可以为列设置别名,这在使用 VALUES 进行 join 查询时非常有用。例如,我们可以避免使用以下写法:

SELECT
    c.c2,
    o.c2
FROM VALUES((1, 'Alice'), (2, 'Bob')) AS c
INNER JOIN VALUES((1, 250), (2, 100), (1, 75)) AS o 
ON c.c1 = o.c1;
   ┌─c2────┬─o.c2─┐
1. │ Alice │  250 │
2. │ Alice │   75 │
3. │ Bob   │  100 │
   └───────┴──────┘

通过为列命名,我们可以让查询更易于理解:

SELECT c.name, o.amount
  FROM (VALUES (1, 'Alice'), (2, 'Bob')) AS c(id, name)
  JOIN (VALUES (1, 250), (2, 100), (1, 75)) AS o(customer_id, amount)
  ON c.id = o.customer_id;
   ┌─name──┬─amount─┐
1. │ Alice │    250 │
2. │ Alice │     75 │
3. │ Bob   │    100 │
   └───────┴────────┘

 

EXTRACT

贡献者:Alexey Milovidov

EXTRACT 运算符(在处理日期时使用)现在支持 PostgreSQL 风格的单位,如下面查询所示:

SELECT
  EXTRACT(EPOCH      FROM now())   AS epoch,
  EXTRACT(DOW        FROM today()) AS dayOfWeek,
  EXTRACT(DOY        FROM today()) AS dayOfYear,
  EXTRACT(ISODOW     FROM today()) AS isoDOW,
  EXTRACT(ISOYEAR    FROM today()) AS isoYear,
  EXTRACT(WEEK       FROM today()) AS isoWeek,
  EXTRACT(CENTURY    FROM today()) AS century,
  EXTRACT(DECADE     FROM today()) AS decade,
  EXTRACT(MILLENNIUM FROM today()) AS millennium;
Row 1:
──────
epoch:      1777992683
dayOfWeek:  2
dayOfYear:  125
isoDOW:     2
isoYear:    2026
isoWeek:    19
century:    21
decade:     202
millennium: 3

设置时区

由 phulv94 贡献

还有一个新的 SQL 标准别名用于设置时区。首先,让我们检查我当前的区域:

SELECT timezone(), formatDateTime(now(), '%Y-%m-%d %H:%M:%S %z');

SELECT timezone(), formatDateTime(now(), '%Y-%m-%d %H:%M:%S %z');

   ┌─timezone()────┬─formatDateTim⋯H:%M:%S %z')─┐
1. │ Europe/London │ 2026-05-05 15:May:47 +0100 │
   └───────────────┴────────────────────────────┘

现在,我们将其设置为 Amsterdam:

SET TIME ZONE 'Europe/Amsterdam';

SET TIME ZONE 'Europe/Amsterdam';

如果我们重新运行上面的查询:

   ┌─timezone()───────┬─formatDateTim⋯H:%M:%S %z')─┐
1. │ Europe/Amsterdam │ 2026-05-05 16:May:59 +0200 │
   └──────────────────┴────────────────────────────┘

其他兼容性改进

不仅如此,现在还支持 NATURAL JOIN,OVERLAY 可直接兼容,复合 INTERVAL 字面量 也受支持,等等!

LIKE 使用文本索引

由 Elmi Ahmadov 贡献

从 ClickHouse 25.4 开始,当 LIKE / ILIKE 查询模式为 不含空格的字母数字字符 且文本索引分词器为 splitByNonAlpha 时,ClickHouse 会使用倒排索引 来加速这些查询。它通过扫描倒排索引字典而非执行全表扫描来查找匹配模式。

让我们看看这在我们的信赖的 HackerNews 数据集上如何工作,首先使用 clickhousectl 让 ClickHouse 26.4 在我的笔记本电脑上运行起来:

chctl local install 26.4

然后我们启动它:

chctl local server start --version 26.4

并使用 ClickHouse 客户端连接:

chctl local client --name default -mn

接下来,我们将创建我们的 HackerNews 表:

CREATE TABLE hackernews
(
    `id` Int64,
    `deleted` Int64,
    `type` String,
    `by` String,
    `time` DateTime64(9),
    `text` String,
    `dead` Int64,
    `parent` Int64,
    `poll` Int64,
    `kids` Array(Int64),
    `url` String,
    `score` Int64,
    `title` String,
    `parts` Array(Int64),
    `descendants` Int64
    GRANULARITY 128
)
ORDER BY time;

然后我们将插入数据:

INSERT INTO hackernews 
SELECT *
FROM url('https://datasets-documentation.s3.eu-west-3.amazonaws.com/hackernews/hacknernews.csv.gz', 'CSVWithNames')

接下来,我们将在 text 列上使用 splitByNonAlpha 分词器添加一个文本索引:

ALTER TABLE hackernews
ADD INDEX text_tokens_idx text 
TYPE text(tokenizer='splitByNonAlpha') 
GRANULARITY 1;

并物化该索引:

ALTER TABLE hackernews
(MATERIALIZE INDEX text_tokens_idx)
SETTINGS mutations_sync = 1;

此优化已在 26.4 中启用,但可以使用 use_text_index_like_evaluation_by_dictionary_scan 设置进行控制。以下查询统计了有多少 Hacker News 帖子提到了 Kubernetes:

SELECT count()
FROM hackernews
WHERE text LIKE '%Kubernetes%'
SETTINGS use_text_index_like_evaluation_by_dictionary_scan=0;
   ┌─count()─┐
1. │   20070 │
   └─────────┘

1 row in set. Elapsed: 0.832 sec. Processed 18.25 million rows, 6.29 GB (21.93 million rows/s., 7.56 GB/s.)
Peak memory usage: 88.18 MiB.

1 row in set. Elapsed: 0.624 sec. Processed 18.25 million rows, 6.29 GB (29.23 million rows/s., 10.08 GB/s.)
Peak memory usage: 87.93 MiB.

1 row in set. Elapsed: 0.638 sec. Processed 18.25 million rows, 6.29 GB (28.60 million rows/s., 9.86 GB/s.)
Peak memory usage: 86.01 MiB.

现在使用优化后:

SELECT count()
FROM hackernews
WHERE text LIKE '%Kubernetes%'
SETTINGS use_text_index_like_evaluation_by_dictionary_scan=1;
   ┌─count()─┐
1. │   20070 │
   └─────────┘

1 row in set. Elapsed: 0.208 sec. Processed 18.25 million rows, 18.25 MB (87.53 million rows/s., 87.53 MB/s.)
Peak memory usage: 2.07 MiB.

1 row in set. Elapsed: 0.225 sec. Processed 18.25 million rows, 18.25 MB (80.98 million rows/s., 80.98 MB/s.)
Peak memory usage: 2.07 MiB.

1 row in set. Elapsed: 0.234 sec. Processed 18.25 million rows, 18.25 MB (77.83 million rows/s., 77.83 MB/s.)
Peak memory usage: 2.07 MiB.

处理的行数相同,但使用此优化的查询的最佳运行时间为 208 毫秒,相比 624 毫秒,速度提升了三倍多。

如果我们比较查询计划,可以看到使用优化的查询扫描的颗粒数减少了 1000 多个。

未使⽤倒排索引:

┌─explain─────────────────────────────────────────────────────────┐
 1. │ Output: count()                                                 │
 2. │                                                                 │
 3. │ Aggregating                                                     │
 4. │ └──Filter ((WHERE + Change column names to column identifiers)) │
 5. │    └──ReadFromMergeTree (default.hackernews)                    │
 6. │          Indexes:                                               │
 7. │            PrimaryKey                                           │
 8. │              Condition: true                                    │
 9. │              Parts: 6/6                                         │
10. │              Granules: 3533/3533                                │
11. │            Skip                                                 │
12. │              Name: text_tokens_idx                              │
13. │              Description: text GRANULARITY 100000000            │
14. │              Condition: (mode: All; tokens: [])                 │
15. │              Parts: 6/6                                         │
16. │              Granules: 3533/3533                                │
17. │            Ranges: 6                                            │
    └─────────────────────────────────────────────────────────────────┘

 

使⽤倒排索引:

    ┌─explain──────────────────────────────────────────────┐
 1. │ Output: count()                                      │
 2. │                                                      │
 3. │ Aggregating                                          │
 4. │ └──Filter                                            │
 5. │    └──ReadFromMergeTree (default.hackernews)         │
 6. │          Indexes:                                    │
 7. │            PrimaryKey                                │
 8. │              Condition: true                         │
 9. │              Parts: 6/6                              │
10. │              Granules: 3533/3533                     │
11. │            Skip                                      │
12. │              Name: text_tokens_idx                   │
13. │              Description: text GRANULARITY 100000000 │
14. │              Condition: (mode: All; tokens: [])      │
15. │              Parts: 6/6                              │
16. │              Granules: 2247/3533                     │
17. │            Ranges: 190                               │
    └──────────────────────────────────────────────────────┘

更快的 COUNT DISTINCT

Jiebin Sun 贡献

在高核数机器上,uniqExact (由 COUNT(DISTINCT ...) 使用) 有以下几项改进:

• ClickHouse 在合并阶段不再创建冗余线程。 uniqExact 使用带有 256 个桶的两级哈希表,但在此之前,ClickHouse 无论如何都会创建多达 max_threads 个线程,其中许多线程会处于空闲状态并立即退出。

• 合并 N 个中间哈希表(每个聚合线程对应一个)时,线程池会初始化 N 次,这导致总共 O(N × threads) 次线程创建和严重的锁竞争。现在,所有 N 个哈希表都在单次遍历中完成合并——每个线程同时处理所有哈希表中的一个桶,从而将线程池初始化次数从 O(N) 减少到 O(1) 。

在我们的一些基准测试中,一台 288 核机器上的性能提升达到 3 到 15 倍。

然而,这主要是一项针对多核机器的优化——我在我的 Mac M2 Max (拥有 12 个核心) 上使用 HackerNews 数据集进行了尝试,但并未观察到任何改进!

更加美观的 EXPLAIN

Kirill Kopnev 贡献

EXPLAIN PLAN pretty=1 现在能以人类可读的形式打印表达式,显示顶层输出列和每步输出列,并为 JOIN 操作标注预估的行数和局部性。

让我们通过以下查询,来看看它是如何工作的:

EXPLAIN pretty = 1
SELECT by, count()
FROM hackernews
WHERE (text LIKE '%OpenAI%') AND (text LIKE '%Google%')
GROUP BY ALL
ORDER BY count() DESC, by
LIMIT 10;

26.3


   ┌─explain────────────────────────────────────────────────────────────────────────────┐
1. │ Expression (Project names)                                                         │
2. │ └──Limit (preliminary LIMIT)                                                       │
3. │    └──Sorting (Sorting for ORDER BY)                                               │
4. │       └──Expression ((Before ORDER BY + Projection))                               │
5. │          └──Aggregating                                                            │
6. │             └──Expression (Before GROUP BY)                                        │
7. │                └──Expression ((WHERE + Change column names to column identifiers)) │
8. │                   └──ReadFromMergeTree (default.hackernews)                        │
   └────────────────────────────────────────────────────────────────────────────────────┘

26.4

    ┌─explain─────────────────────────────────────────────────────┐
 1. │ Output: by, count()                                         │
 2. │                                                             │
 3. │ Expression (Project names)                                  │
 4. │ └──Limit (preliminary LIMIT)                                │
 5. │    └──Sorting (Sorting for ORDER BY)                        │
 6. │       └──Expression ((Before ORDER BY + Projection))        │
 7. │          └──Aggregating                                     │
 8. │             └──Expression (Before GROUP BY)                 │
 9. │                └──Expression                                │
10. │                   └──ReadFromMergeTree (default.hackernews) │
    └─────────────────────────────────────────────────────────────┘

JSONAllValues + 文本索引

Anton Popov 贡献

ClickHouse 26.4 Values 函数,它会将 JSON 列中的每个叶子值作为 Array(String) 类型返回。基于此,我们可以创建一个文本索引,从而实现对 JSON 子列更高效的过滤。

让我们借助 StatsBomb 数据集 来看看它是如何工作的。通过运行以下命令,我们将在本地机器上获取一个数据子集:

git clone --filter=blob:none --sparse https://github.com/statsbomb/open-data.git
cd open-data
git sparse-checkout set data/events

我们将使用 clickhouse-local 创建以下表格:

CREATE TABLE events (
      match_id UInt32,
      json JSON(id String, index UInt32),
      INDEX vals JSONAllValues(json) TYPE text(tokenizer = 'ngrams') GRANULARITY 1
  )
  ENGINE = MergeTree
  ORDER BY (match_id, json.index);

然后插入数据:

INSERT INTO events
SELECT
  toUInt32(replaceRegexpOne(_file, '\\.json$', '')) AS match_id,
  json
FROM file('open-data/data/events/*.json', JSONAsObject);
12188949 rows in set. Elapsed: 1275.404 sec. Processed 12.19 million rows, 10.48 GB (9.56 thousand rows/s., 8.22 MB/s.)
Peak memory usage: 1.87 GiB.

为了更好地理解这个索引是如何工作的,我们来看一下 JSONAllValues 函数会返回什么:

SELECT JSONAllValues(json) FROM events LIMIT 1
FORMAT Vertical;
JSONAllValues(json): ['[36.4,21.7]','1.013174','000000b5-8156-429d-9088-e62a6ac2ea0d','2529','[36.8,20]','60','2','4','From Throw In','10958','Chris Smalling','5','Left Center Back','123','39','Manchester United','[\'5fbbde9b-74ab-48e9-9873-ef956db384de\',\'fd43cc18-c37b-438a-8a40-a8bb50e59469\']','18','39','Manchester United','00:15:18.727','43','Carry']

这个数据集只有 1200 多万条记录,还不太足以体现索引带来的影响,所以我们先把数据重复复制几轮:

ALTER TABLE events
ATTACH PARTITION ID 'all'
FROM events;
0 rows in set. Elapsed: 3.892 sec.
0 rows in set. Elapsed: 7.957 sec.
0 rows in set. Elapsed: 15.894 sec.
0 rows in set. Elapsed: 33.655 sec.
0 rows in set. Elapsed: 68.870 sec.

现在,记录数就多多了:

SELECT count()
FROM events;
   ┌───count()─┐
1. │ 390046368 │ -- 390.05 million
   └───────────┘

以下查询返回与 Lionel Messi 相关的行数:

SELECT count()
FROM events
WHERE json.player.name = 'Lionel Andrés Messi Cuccittini'
SETTINGS use_skip_indexes = 1;

我们可以通过设置 use_skip_indexes = 0 来禁用文本索引。运行此查询将得到以下结果:

   ┌─count()─┐
1. │ 4268960 │ -- 4.27 million
   └─────────┘

我们将在不使用索引的情况下运行该查询三次:

1 row in set. Elapsed: 1.505 sec. Processed 390.05 million rows, 13.87 GB (259.20 million rows/s., 9.22 GB/s.)
Peak memory usage: 48.23 MiB.

1 row in set. Elapsed: 1.666 sec. Processed 390.05 million rows, 13.87 GB (234.12 million rows/s., 8.32 GB/s.)
Peak memory usage: 48.23 MiB.

1 row in set. Elapsed: 1.668 sec. Processed 390.05 million rows, 13.87 GB (233.88 million rows/s., 8.32 GB/s.)
Peak memory usage: 48.23 MiB.

并在使用索引的情况下运行该查询三次:

1 row in set. Elapsed: 1.139 sec. Processed 80.64 million rows, 3.23 GB (70.80 million rows/s., 2.84 GB/s.)
Peak memory usage: 69.25 MiB.

1 row in set. Elapsed: 1.096 sec. Processed 80.64 million rows, 3.23 GB (73.61 million rows/s., 2.95 GB/s.)
Peak memory usage: 68.93 MiB.

1 row in set. Elapsed: 1.087 sec. Processed 80.64 million rows, 3.23 GB (74.21 million rows/s., 2.97 GB/s.)
Peak memory usage: 74.13 MiB.

从处理的行数来看,索引将需要扫描的数据量减少了近5倍。在不使用索引的情况下,最佳时间为1,505毫秒;而使用索引时,最佳时间为1,087毫秒,查询性能提升了约50%。

征稿启示

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

关于我们

ClickHouse 是全球速度最快,资源利用最高效的在线分析列式数据库管理系统。现在,ClickHouse可以作为一个安全可扩展的无服务器应用在云中提供服务。通过云服务,ClickHouse使得任何人都能轻松获取高效的实时分析处理能力。

多维聚合实战:从GROUP BY到OLAP立方体的数据操作术 多维聚合是现代数据分析的核心能力,本质是构建支持切片(Slice)、切块(Dice)、上卷(Roll-up)和下钻(Drill-down)的OLAP立方体模型,区别于传统单维或简单多字段GROUP BY。其技术价值在于实现高维数据的实时、可解释、可归因分析,支撑BI钻取、同比环比、Z-score标准化、移动平均平滑、分位数分级等关键操作。典型应用场景包括零售销售归因、用户价值分层、区域业绩穿透及风控指标动态校准。本文聚焦Multi-Dimensional Aggregation在Pandas与SQL中的工程 阅读详情

相关推荐

PolarDB百TB级存储优化:ZSTD压缩与冷热分层实战

关系型数据库在数十TB数据规模下普遍面临存储成本飙升、查询延迟恶化和运维复杂度激增的三重挑战。其底层原理在于传统架构中计算与存储紧耦合、压缩算法与IO路径不协同、数据访问热度缺乏动态感知。技术价值体现在通过存储计算分离降低弹性成本,借助ZSTD实现高压缩率与低CPU开销的平衡,结合冷热分层提升介质利用率。典型应用场景包括用户行为分析、IoT设备上报、电商订单归档等日增千万级数据的实时+归档混合负载。本文以100TB真实落地为切口,深入解析PolarDB如何通过ZSTD压缩与冷热分层机制,在不改变应用SQL的

weixin_33782386的博客 295

多维聚合数据操作:构建可交互数据立方体的核心技术

多维聚合是一种将业务数据建模为多维坐标空间的技术范式,其本质是通过维度(如时间、区域、产品)与度量(如销售额、用户数)的严格分离,建立可上卷、下钻、切片的结构化分析体系。它超越传统SQL GROUP BY的线性分组逻辑,强调预计算、维度完整性、空值语义治理和计算成员的准确性。在OLAP引擎(如ClickHouse、Doris)和BI工具协同下,支撑实时、灵活、可解释的经营分析——尤其适用于销售归因、财务多维成本分摊、用户行为交叉分析等典型场景。本文聚焦Data Manipulation in Multi-D

weixin_34341117的博客 284

【信息科学与工程学】计算机科学与自动化——第三百零四篇 高性能系统开发指南01

高并发:限流、熔断、降级高性能:红包拆分、多级缓存、大Key/热Key拆分、Pipeline、线程池、RocketMQ零丢失、幂等、分布式锁、集群缩容、分批入库海量数据处理:日志分表分片、跨表查询、冷热分层、大数据引擎服务器选型系统安全:网关安全、服务器安全、云存储安全、风控、监控、测试数据一致性:缓存与数据库一致性、大厂方案、蓝绿回滚、流量一致性、流程一致性项目与团队管理:流程问题、管理问题(风险、成本、人员、文档、培训)稳定性建设:上线三板斧、线上五步闭环、混沌工程、容量规划。

weixin_49199313的博客 249

ClickHouse 关联测试选择器深入解析:基于逐测试行级覆盖率的 find_tests.py 架构与实现

在 ClickHouse 的 CI 体系中,`ci/jobs/scripts/find_tests.py` 扮演着“定向测试选择器”的角色:它对每个 PR 的 diff 做行级分析,再通过查询记录“每个测试覆盖了哪些源码行”的覆盖率数据库(CIDB),找出最可能回归该改动的高价值 stateless 测试。本文从 [关联测试选择开发指南](https://link.gitcode.com/i/af

gitblog_01159的博客 979

【信息科学与工程学】【数据科学】第五十一篇 数据仓库00 基础设计01

数据仓库设计的系统性解决方案,涵盖架构模式、分层设计、百万级访问支撑、海量数据配置及与数据库/数据湖的对接策略: ​​ODS(操作数据层)​​:原始数据镜像,保留历史快照 ​​DWD(明细数据层)​​:清洗、标准化、维度退化 ​​DWS(汇总数据层)​​:主题宽表、轻度聚合 ​​ADS(应用数据层)​​:高度聚合,面向报表/API ​​二、百万用户访问架构设计​​ ​​1. 核心架构组件​​ ​​2. 关键配置参数(以Snowflake为例)​​ ​​3. 性能优化措

weixin_49199313的博客 1202

【Infracture】【数据中心】第十三篇 Ai infra中的“现象→根因→方案→关键参数/落地”01

现象:同步 RL step 里 99 分位输出长度是中位数的几倍到几十倍,整批等最慢几条;CoT/数学/代码尤甚,GPU 空泡严重,generation 占整体 50–80%、推理任务可到 80%+。根因方案矩阵落地红线:staleness K 先小(1→2→调),长尾不丢弃只延后;记录每条轨迹 policy_version、tokenizer_version、logprob、expert_route,便于重算 advantage 时做 off‑policy 修正。部署形态:gateway(router)→

weixin_49199313的博客 375

第35章 SQL CREATE INDEX 语句教程

CREATE INDEX 语句用于在表中创建索引。在不读取整个表的情况下,索引使database应用程序可以更快地查找数据。

881

【信息科学与工程学】计算机科学与技术——第七十七篇 系统架构设计02

编号类型模型配方企业资本运作的方法/规则/条件/依据及所有的步骤(​风险处理/异常处理/危机应对关联知识法律法规和裁决依据​​由发起人(通常是知名投资人、投行或产业资本)先设立一个只有现金、无实际业务的特殊目的收购公司(SPAC),通过IPO募集资金并在交易所上市。然后在规定时间内(通常24个月)寻找一家非上市公司进行合并(De-SPAC),使目标公司迅速实现上市,规避传统IPO的复杂流程和不确定性。1.:在开曼或特拉华注册空壳公司,注入少量种子资金。2.

weixin_49199313的博客 305

在Codex 让AI模型 拥有长期智能记忆

本文介绍Claude-Mem V15新功能——智能记忆召回,解决AI遗忘、重复提示、执行不一致等问题。通过本地部署claude-mem,实现自动记录决策(如数据库选型)、跨会话智能召回,支持记忆写入、检索、遗忘全流程闭环。相比传统记忆方案,其基于Hooks自动捕获工具调用,结构化存储,可追溯、可共享、可清理,显著提升工程效率与协作一致性,是长期项目中理想的“工作黑匣子”与“工程脑”。

米莱虾 262

国产大模型编程能力深度分析报告(2026年5月更新版)

2026年5月国产大模型编程能力报告显示,主流模型迎来重大升级。DeepSeek V4以1.6T参数创性能新高,Qwen3.6-Plus支持原生多模态编程,MiniMax M2.7转向闭源并优化Agent编码,Kimi K2.6成为商业化成熟的主力模型,GLM-5开源并涨价30%。阿里云百炼推出双轨订阅体系,区分团队和个人开发者需求。各模型在参数规模、上下文长度、性能表现和适用场景上各具优势,国产AI编程服务正加速向订阅制转型,成本效益显著提升。

Willin Wang 的全栈升级指南 1642

Xilinx XDMA IP核配置实战:AXI Memory Mapped vs Stream选型指南(附PCIe调试技巧)

本文深入解析Xilinx XDMA IP核配置中AXI Memory Mapped与AXI Stream两种DMA接口的核心区别与选型策略。针对PCIe高速数据传输场景,详细对比了二者在数据特性、延迟、硬件资源及软件复杂度上的差异,为FPGA工程师在数据采集、实时处理等项目中做出高效设计决策提供实战指南,并附有关键的PCIe调试技巧。

qsc901234的博客 585

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 115

【新华三】DHCP+TFTP+ZTP自动开局实战

设备运行ZTP功能,可以自动获取并自动加载开局文件,实现设备的免现场配置和部署,从而降低人力成本,提升部署效率。使用TFTP服务器工具进行文件的上传和下载,网上很多TFTP server软件,大家可以自行下载。3CDaemon等,可以根据使用自取所需。大家应该都了解ZTP,但是目前发现除了控制器之外仅使用ZTP开局的兄弟并不是很多,因此分享此过程方便大家批量开局,留出更多时间学习更多技术。电脑打开DHCP服务器,TFTP服务器,并通过网线连接到设备的管理口,若设备较多可以通过带外交换机等进行连接,

五大连池的镜子 4978

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 194

PCB过孔电流承载解析:完整指南与数据参考

深入解析PCB过孔的电流承载能力,结合实际应用场景提供可靠设计参考。涵盖影响载流的关键因素,并整理实用的pcb过孔与电流对照一览表,帮助工程师优化布局与布线。

weixin_35677363的博客 630

全国30米分辨率逐年植被覆盖度(FVC)数据集

植被覆盖度是描述地表植被的重要参数与生态环境的基本指标,在大气圈、土壤圈、水圈和生物圈中都占据着重要的地位,区域及全球范围的植被覆盖度估算对植被及相关领域的研究具有重要意义。往往参照《土壤侵蚀分类分级标准》,将植被覆盖度划分为4个等级:<30%为低覆盖度、30%—45%为中低覆盖度、45%—60%为中覆盖度、>60%为高覆盖度。本数据集包括1986至2022年间,全国植被覆盖度数据,FVC范围值为0-1,数据为浮点型,GeoTIFF格式。NDVImax 和NDVImin分别为区域内最大和最小的NDVI值。

地球资源数据云的官方博客 1965

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 425

android 运动目标检测_MindSpore应用案例:AI对篮球运动员目标的检测

MindSpore作为一个端边云协同的开源的全场景AI框架,今年3月份开源以来,受到了业界的广泛关注和应用,欢迎大家参与开源贡献、模型众智合作、行业创新与应用、学术合作等,贡献您在云侧、端侧 (HiMindSpore 应用程序)、边侧以及安全领域的应用案例。MindSpore与您在AI领域共同成长,让AI使能千行百业,释放出强大的生产力。本文讲述的是MindSpore对篮球运动员目标的检测应用,通...

weixin_33603813的博客 834

45-存储过程与函数

匿名块跑完就没了,想下次再用只能复制粘贴。给块起个名字存进数据库,就成了存储过程与函数:一次编译、处处调用、权限收口,还能让 Java 侧少拼 SQL。这篇讲封装、调用、限制与排错的完整套路。CREATE OR REPLACE 覆盖式创建,事务由调用方控制;参数三模式 IN 只进、OUT 只出、IN OUT 双向,OUT 参数调用时要备好变量接;调用三姿势 EXEC、CALL、匿名块,命名传参=>最清晰;函数必有 RETURN,想在 SQL 里调用就不能碰 DML 和事务控制;

yuhou25的博客 152

IgH EtherCAT 从入门到精通:第 2 章 环境搭建与编译安装

环境搭建与编译安装指南 本章详细介绍了搭建IgH EtherCAT Master开发环境的完整流程。内容包括: 硬件要求:支持多种Intel和Realtek网卡的原生驱动,以及通用网卡的generic驱动选项 软件依赖:列出Linux系统下所需的工具链和开发包 源码获取:通过Git克隆官方仓库并切换稳定版本的方法 配置选项:详细解析bootstrap脚本和configure的核心参数,包括路径设置、功能开关和实时框架选项 编译流程:从生成构建系统到最终编译安装的完整步骤 通过本章指导,读者可以完成一个可运行

从事嵌入式linux android驱动开发,拥有全栈能力 476

《YOLO11魔术师专栏》专栏介绍 & 专栏目录

【原创自研模块】【多组合点优化】【注意力机制】【主干篇】【neck优化】【卷积魔改】 【block&多尺度融合结合】【损失&IOU优化】【上下采样优化】【小目标性能提升】【前沿论文分享】【训练实战篇】

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1万+

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 389

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

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

数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南

Oracle 提供了ORA_ROWSCN伪列(System Change Number),记录最后修改行的 SCN,类似 PostgreSQL 的xmin。实践中通常仍使用 version 字段方案,逻辑与 MySQL 完全相同。-- Oracle:通过 ORA_ROWSCN 实现乐观锁-- 更新时比对 SCN// 自定义注解// AOP 切面@Aspect@Component@Slf4jtry {

yjc_1111的专栏 396

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数据库主键选型指南:BIGINT vs VARCHAR

主键选型关乎数据库性能与架构演进。BIGINT(如雪花算法)在顺序写入、二级索引开销和分布式生成上优势显著,适合高并发核心链路;而传统 VARCHAR UUIDv4 因随机性导致频繁页分裂、存储膨胀,性能堪忧。UUIDv7 通过时间戳有序性实现高效追加写入,结合 BINARY(16) 存储可兼顾性能与安全,成为现代微服务新选择。关键在于:主键应稳定、无业务含义,优先选用趋势递增的紧凑类型,并根据场景合理采用双主键模式或 ULID 等替代方案。

小李同学的博客 300

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

自动化运维选型:四条技术路线的能力边界,以及它们为什么不能互相替代

自动化运维怎么选型?拆解配置管理、基础设施即代码、作业调度与场景化编排四条技术路线边界,分析账本归属与时间语义差异,给出四种架构组合与判断点,帮企业看清为何不能互相替代。

trainsignalcn的专栏 324

不用再为文本搜索单独维护一套系统!全文检索深度解析

为了给商品、客服工单或者企业知识库增加一个搜索框,企业往往需要在业务数据库之外,再部署一套Elasticsearch。数据库保存商品、订单和用户等真实业务数据,搜索引擎保存另一份文本索引;两套系统之间,还需要通过CDC、消息队列或者同步程序持续传输数据。一个看似简单的搜索需求,最后可能变成两套集群、两份数据和一条必须保持稳定的数据链路。由此产生的问题并不少:数据库已经完成更新,搜索结果却可能尚未同步;业务查询同时涉及文本、库存、权限和订单状态时,应用需要在两个系统之间来回组合结果;

TiDB 社区干货传送门 196
上一篇: ClickHouse实战:Agentic Coding,是“神”还是“坑”?
下一篇: ClickHouse 26.5 版本发布说明
ClickHouseDB
博客等级 码龄3年 1707粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值