跳转到主要内容

数据类型

在 ClickHouse 和 Redshift 之间迁移数据的用户会立刻注意到, ClickHouse 提供了更丰富的类型,而且约束也更少。 Redshift 要求用户指定字符串的可能长度, 即使是可变长度字符串也不例外;而 ClickHouse 则通过将字符串存储为不带编码的字节, 免除了这一限制和负担。因此,ClickHouse 的 String 类型既没有长度限制,也无需指定长度。 此外,你还可以使用 Arrays、Tuples 和枚举——这些在 Redshift 中并不是一等公民 (尽管可以用 SUPER 模拟 Arrays/Structs) , 而这也一直是用户的常见痛点。ClickHouse 还允许持久化聚合 状态,无论是在查询时,还是直接存储在表中。 这使得数据可以预先聚合,通常是通过 materialized view 来实现,并且能够显著提升常见查询的性能。 下面我们将为每种 Redshift 类型映射其对应的 ClickHouse 类型: * ClickHouse 还支持取值范围更大的无符号整数,即 UInt8, UInt32, UInt32 and UInt64
**ClickHouse 的 String 类型默认长度不受限制,但也可以使用 约束 将其限定为特定长度。

DDL 语法

排序键

ClickHouse 和 Redshift 都有“排序键”这一概念,用于定义 数据在存储时的排序方式。Redshift 通过 SORTKEY 子句来定义排序键:
相比之下,ClickHouse 使用 ORDER BY 子句来指定排序方式:
在大多数情况下,如果你使用的是默认的 COMPOUND 类型,就可以在 ClickHouse 中使用与 Redshift 相同的排序键列及其顺序。当数据写入 Redshift 后,你应运行 VACUUMANALYZE 命令,对新写入的数据重新排序, 并为查询规划器更新统计信息——否则,未排序空间会不断增长。ClickHouse 则不需要这一过程。 Redshift 为排序键提供了几项便捷功能。第一项是 自动排序键 (使用 SORTKEY AUTO) 。虽然这可能适合 入门使用,但如果排序键选择得当,显式指定排序键更能确保最佳性能 和存储效率。第二项是 INTERLEAVED 排序键, 它会对排序键中的部分列赋予相同权重,以提升 查询使用一个或多个次级排序列时的性能。ClickHouse 支持显式投影,通过略有不同的配置方式 即可达到相同效果。 你应当注意,“主键”这一概念 在 ClickHouse 和 Redshift 中所指并不相同。在 Redshift 中,主键类似于传统 RDBMS 中用于强制执行约束的概念。不过,它们在 Redshift 中并不会被严格 强制执行,而是作为查询规划器的提示,以及节点间数据 分布的依据。在 ClickHouse 中,主键表示用于构建 稀疏主索引的列,该索引用于确保数据在磁盘上有序存放, 从而最大限度提高压缩效果,同时避免主索引受到污染并 浪费内存。
最后修改于 2026年7月2日