如何在ClickHouse中创建主键

7

我在文档中找到了一些通过将参数传递给ENGINE部分创建主键的示例,但是我没有找到任何关于ENGINE的任何参数的描述,以及如何创建主键的说明。谢谢提前。如果文档中不存在此信息,则添加此信息将非常有用。

1个回答

10

MergeTree存储引擎系列支持主键。

https://clickhouse.tech/docs/zh/engines/table_engines/mergetree_family/mergetree/

请注意,对于大多数重要的任务,应使用MergeTree家族中的引擎。

它作为存储引擎的参数进行指定。

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

不支持抽样的示例:

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

具有采样支持的示例:

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

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

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

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

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

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


2
主键在存储引擎中作为参数定义,例如MergeTree(EventDate, (CounterID, EventDate), 8192),与Order By子句有什么区别?如果我将存储引擎的参数留空但提供Order by的参数会发生什么? - lloiacono

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接