如何在ClickHouse中创建主键

Yur*_*nko 5 database columnstore clickhouse

我确实在文档中找到了一些示例,其中通过将参数传递给ENGINE部分来创建主键.但是我没有找到关于ENGINE的任何参数的任何描述,它意味着什么以及如何创建主键.提前致谢.将此信息添加到它不存在的文档中会很棒.

uYS*_*foz 7

MergeTree存储引擎系列支持主键. https://clickhouse.yandex/reference_en.html#MergeTree

请注意,对于大多数严肃的任务,您应该使用MergeTree系列中的引擎.

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

引擎接受参数:包含日期的Date类型列的名称,采样表达式(可选),定义表主键的元组以及索引粒度.

没有采样支持的示例:

MergeTree(EventDate, (CounterID, EventDate), 8192)
Run Code Online (Sandbox Code Playgroud)

采样支持示例:

MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192)
Run Code Online (Sandbox Code Playgroud)

所以,(CounterID, EventDate)或者(CounterID, EventDate, intHash32(UserID))是这些例子中的主键.

使用ReplicatedMergeTree时,还有两个附加参数,用于标识分片和副本.

https://clickhouse.yandex/reference_en.html#Creating%20replicated%20tables

主键在表创建时指定,以后无法更改.

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

  • 作为存储引擎参数定义的主键,即“MergeTree(EventDate, (CounterID, EventDate), 8192)”和 Order By 子句有什么区别?如果我将存储引擎的参数留空但提供排序依据的参数,会发生什么情况? (2认同)