【问题标题】:How to create primary keys in ClickHouse如何在 ClickHouse 中创建主键
【发布时间】:2016-12-05 16:55:13
【问题描述】:

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

【问题讨论】:

    标签: database columnstore clickhouse


    【解决方案1】:

    MergeTree 存储引擎系列支持主键。 https://clickhouse.tech/docs/en/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 时,还有两个附加参数,标识 shard 和 replica。

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

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

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

    【讨论】:

    • 存储引擎参数中定义的主键MergeTree(EventDate, (CounterID, EventDate), 8192)和Order By子句有什么区别?如果我将存储引擎的参数留空但为 Order by 提供参数会怎样?
    猜你喜欢
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2011-04-14
    相关资源
    最近更新 更多