跳至主要内容

在 ClickHouse 中创建表格

与大多数数据库一样,ClickHouse 将表格逻辑地分组到**数据库**中。使用 CREATE DATABASE 命令在 ClickHouse 中创建一个新的数据库

CREATE DATABASE IF NOT EXISTS helloworld

类似地,使用 CREATE TABLE 来定义一个新的表格。(如果你没有指定数据库名称,表格将位于 default 数据库中。)以下表格名为 my_first_table,位于 helloworld 数据库中

CREATE TABLE helloworld.my_first_table
(
user_id UInt32,
message String,
timestamp DateTime,
metric Float32
)
ENGINE = MergeTree()
PRIMARY KEY (user_id, timestamp)

在上面的示例中,my_first_table 是一个 MergeTree 表格,包含四个列

  • user_id:一个 32 位无符号整数

  • message:一个 String 数据类型,它取代了其他数据库系统中的 VARCHARBLOBCLOB 等类型

  • timestamp:一个 DateTime 值,表示一个时间点

  • metric:一个 32 位浮点数

    注意

    表格引擎决定

    • 数据如何以及在何处存储
    • 支持哪些查询
    • 数据是否被复制

    有很多引擎可供选择,但对于单节点 ClickHouse 服务器上的简单表格,MergeTree 是你的最佳选择。

    关于主键的简要介绍

    在你继续之前,了解 ClickHouse 中主键的工作原理非常重要(主键的实现方式可能出乎你的意料!)

    • ClickHouse 中的主键不唯一对应表格中的每一行

    ClickHouse 表格的主键决定数据写入磁盘时的排序方式。每 8,192 行或 10MB 的数据(称为**索引粒度**)都会在主键索引文件中创建一个条目。这种粒度概念创建了一个稀疏索引,它可以轻松地放入内存,而这些颗粒代表了在 SELECT 查询期间处理的最小数量的列数据。

    主键可以使用 PRIMARY KEY 参数定义。如果你定义一个表格,没有指定 PRIMARY KEY,那么键将变成 ORDER BY 子句中指定的元组。如果你同时指定了 PRIMARY KEYORDER BY,那么主键必须是排序顺序的前缀。

    主键也是排序键,它是一个 (user_id, timestamp) 元组。因此,存储在每个列文件中的数据将按 user_id、然后按 timestamp 排序。

提示

有关更多详细信息,请查看 ClickHouse Academy 中的数据建模培训模块