跳到主要内容
跳到主要内容
编辑此页

在 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 数据(称为索引粒度)会在主键索引文件中创建一个条目。这种粒度概念创建了一个可以轻松容纳在内存中的稀疏索引,并且 granules 代表了在 SELECT 查询期间处理的最小列数据条带。

    可以使用 PRIMARY KEY 参数定义主键。如果您定义表时未指定 PRIMARY KEY,则键将成为 ORDER BY 子句中指定的元组。如果您同时指定了 PRIMARY KEYORDER BY,则主键必须是排序顺序的前缀。

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

提示

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