在 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
数据类型,它取代了其他数据库系统中的VARCHAR
、BLOB
、CLOB
等类型timestamp
:一个DateTime
值,表示一个时间点metric
:一个 32 位浮点数关于主键的简要介绍
在你继续之前,了解 ClickHouse 中主键的工作原理非常重要(主键的实现方式可能出乎你的意料!)
- ClickHouse 中的主键不唯一对应表格中的每一行
ClickHouse 表格的主键决定数据写入磁盘时的排序方式。每 8,192 行或 10MB 的数据(称为**索引粒度**)都会在主键索引文件中创建一个条目。这种粒度概念创建了一个稀疏索引,它可以轻松地放入内存,而这些颗粒代表了在
SELECT
查询期间处理的最小数量的列数据。主键可以使用
PRIMARY KEY
参数定义。如果你定义一个表格,没有指定PRIMARY KEY
,那么键将变成ORDER BY
子句中指定的元组。如果你同时指定了PRIMARY KEY
和ORDER BY
,那么主键必须是排序顺序的前缀。主键也是排序键,它是一个
(user_id, timestamp)
元组。因此,存储在每个列文件中的数据将按user_id
、然后按timestamp
排序。
有关更多详细信息,请查看 ClickHouse Academy 中的数据建模培训模块。