ClickHouse 指南(一)

ClickHouse release 24.1, 2024-01-30

1、创建表

像大多数数据库一样,ClickHouse在逻辑上将表分组到 databases 中。使用CREATE DATABASE命令在ClickHouse中创建一个新的数据库:

CREATE DATABASE IF NOT EXISTS helloworld

类似地,使用CREATE TABLE定义一个新表。(如果不指定数据库名称,则表将在default 数据库中。)下面这个表的名字是helloworld数据库中的my_first_table:

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的数据(称为索引粒度,index granularity)在主键索引文件中创建一个条目。这种粒度概念创建了一个可以轻松放入内存的稀疏索引(sparse index ),粒度(granules )表示SELECT查询期间处理的最少量列数据的条带。

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

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

2、插入数据到ClickHouse

您可以在ClickHouse中使用熟悉的INSERT INTO TABLE命令,但重要的是要理解,每次插入到MergeTree表中都会导致在存储中创建一个part 。即使是一个简单的例子,让我们一次插入多行:

INSERT INTO helloworld.my_first_table (user_id, message, timestamp, metric) VALUES
    (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值