重写 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 查询非常简洁。