跳转到主要内容

数据类型

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