我在文档中找到了一些通过将参数传递给ENGINE部分创建主键的示例,但是我没有找到任何关于ENGINE的任何参数的描述,以及如何创建主键的说明。谢谢提前。如果文档中不存在此信息,则添加此信息将非常有用。
我在文档中找到了一些通过将参数传递给ENGINE部分创建主键的示例,但是我没有找到任何关于ENGINE的任何参数的描述,以及如何创建主键的说明。谢谢提前。如果文档中不存在此信息,则添加此信息将非常有用。
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时,还有两个附加参数,用于标识分片和副本。
主键在创建表时指定,无法在以后更改。
尽管名称为主键,但它不是唯一的。它只定义了数据的排序顺序,以便以最优方式处理范围查询。您可以向表中插入许多具有相同主键值的行。
MergeTree(EventDate, (CounterID, EventDate), 8192)
,与Order By子句有什么区别?如果我将存储引擎的参数留空但提供Order by的参数会发生什么? - lloiacono