如何在 ClickHouse 中创建主键

How to create primary keys in ClickHouse

我确实在文档中发现了几个通过将参数传递给 ENGINE 部分来创建主键的示例。 但是我没有找到关于 ENGINE 的任何参数的任何描述,它的含义以及如何创建主键。 提前致谢。将此信息添加到它不存在的文档中会很棒。

MergeTree 存储引擎系列支持主键。 https://clickhouse.tech/docs/en/engines/table_engines/mergetree_family/mergetree/

Note that for most serious tasks, you should use engines from the MergeTree family.

它被指定为存储引擎的参数。

The engine accepts parameters: the name of a Date type column containing the date, a sampling expression (optional), a tuple that defines the table's primary key, and the index granularity.

Example without sampling support:

MergeTree(EventDate, (CounterID, EventDate), 8192)

Example with sampling support:

MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192)

因此,(CounterID, EventDate)(CounterID, EventDate, intHash32(UserID)) 是这些示例中的主键。

使用ReplicatedMergeTree时,还有两个额外的参数,标识shard和replica。

https://clickhouse.tech/docs/en/engines/table_engines/mergetree_family/replication/#creating-replicated-tables

主键在 table 创建时指定,以后无法更改。

尽管有名称,但主键并不是唯一的。它只是定义数据的排序顺序以最佳方式处理范围查询。您可以将许多具有相同主键值的行插入 table.