跳到主要内容
跳到主要内容

重写 PostgreSQL 查询

这是关于从 PostgreSQL 迁移到 ClickHouse 的指南的 第二部分。通过一个实际的例子,它演示了如何高效地进行实时复制(CDC)方式的迁移。许多涵盖的概念同样适用于从 PostgreSQL 到 ClickHouse 的手动批量数据传输。

您 PostgreSQL 设置中的大多数 SQL 查询应在 ClickHouse 中无需修改地运行,并且执行速度可能更快。

使用 CDC 的去重

在使用实时复制和 CDC 时,请记住,更新和删除可能会导致重复行。为了管理这一点,您可以使用涉及视图和可刷新的物化视图的技术。

请参阅本指南,了解如何在使用实时复制和 CDC 迁移时以最小的摩擦将您的应用程序从 PostgreSQL 迁移到 ClickHouse。

在 ClickHouse 中优化查询

虽然可以在最小查询重写的情况下进行迁移,建议利用 ClickHouse 的特性以显著简化查询并进一步提高查询性能。

这里的例子涵盖了常见的查询模式,并展示了如何使用 ClickHouse 对其进行优化。它们使用了完整的Stack Overflow 数据集(截至 2024 年 4 月)与 PostgreSQL 和 ClickHouse 中的等效资源(8 核心,32GiB 内存)。

为了简单起见,下面的查询省略了去重数据的技术。

此处的计数会略有不同,因为 PostgreSQL 数据仅包含满足外键参照完整性的行。ClickHouse 不施加此类约束,因此具有完整的数据集,例如包括匿名用户。

用户(提问超过 10 个)中获得最多浏览量的:

哪些 tags 获得了最多的 views

聚合函数

用户在可能的情况下应利用 ClickHouse 聚合函数。下面我们展示了使用argMax函数来计算每年查看次数最多的问题。

这比对应的 PostgreSQL 查询显著简单(且更快):

条件和数组

条件和数组函数使查询显著简化。以下查询计算了从 2022 年到 2023 年增幅最大的标签(出现超过 10000 次)。请注意,由于条件、数组函数的存在以及在 HAVING 和 SELECT 子句中重用别名的能力,下面的 ClickHouse 查询非常简洁。

点击这里查看第三部分