跳转到主要内容
这是从 PostgreSQL 迁移到 ClickHouse 指南的第 2 部分。本文通过一个实际示例,展示如何采用 CDC (变更数据捕获) 的实时复制方式高效完成迁移。文中介绍的许多概念也同样适用于将数据从 PostgreSQL 手动批量迁移到 ClickHouse。
你在 PostgreSQL 环境中的大多数 SQL 查询都应该无需修改即可在 ClickHouse 中运行,而且往往会执行得更快。

使用 CDC (变更数据捕获) 进行去重

使用 CDC (变更数据捕获) 进行实时复制时,请注意,更新和删除操作可能会导致出现重复行。为此,你可以采用基于 View 和可刷新 materialized view 的技术。 请参阅这份指南,了解在使用 CDC (变更数据捕获) 进行实时复制迁移时,如何以尽可能小的改动将应用程序从 PostgreSQL 迁移到 ClickHouse。

优化 ClickHouse 中的查询

虽然只需极少的查询改写即可完成迁移,但仍建议充分利用 ClickHouse 的特性,以显著简化查询并进一步提升查询性能。 这里的示例涵盖了常见的查询模式,并展示了如何借助 ClickHouse 对其进行优化。这些示例基于 PostgreSQL 和 ClickHouse 的同等资源配置 (8 核、32GiB RAM) ,并使用完整的 Stack Overflow 数据集 (截至 2024 年 4 月) 。
为简化说明,下面的查询省略了数据去重相关技术。
此处的计数结果会略有差异,因为 Postgres 中的数据只包含满足外键引用完整性的行。ClickHouse 不施加这类约束,因此包含完整数据集,例如也包括匿名用户。
浏览量最高的用户 (提问数超过 10 个) :
哪些 tagsviews 最多:
聚合函数 在条件允许的情况下,建议优先使用 ClickHouse 聚合函数。下面展示如何使用 argMax 函数来计算每年浏览量最高的问题。
相比等效的 Postgres 查询,这要简单得多 (也快得多) :
条件函数与数组 条件函数和数组函数可以让查询大为简化。以下查询会找出从 2022 年到 2023 年百分比增幅最大的标签 (出现次数超过 10000 次) 。请注意,下面这个 ClickHouse 查询之所以如此简洁,是因为它利用了条件函数、数组函数,以及在 HAVING 和 SELECT 子句中复用别名的能力。
点击此处前往第 3 部分
最后修改于 2026年7月1日