Clickhouse创建数据库和创建表、增加表列

官方文档

创建表

# CREATE DATABASE [IF NOT EXISTS] database_name;
CREATE DATABASE qx_tj;

创建表

# CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
# (    
# name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1],    name2 [type2]  [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2],    
# ...
# ) ENGINE = MergeTree

CREATE TABLE qx_tj.tb_request_record
(
    `id` UInt64 COMMENT '自增ID',
    `uid` UInt32 COMMENT '用户ID',
    `bid` UInt64 COMMENT '书籍ID',
    `chapterno` UInt64 COMMENT '章节排序值',
    `client` UInt8 COMMENT '客户端 1 安卓 2 苹果',
    `timestamp` DateTime COMMENT '创建时间',
    `cdate` Date COMMENT '创建日期'
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(cdate) #
ORDER BY (bid, cdate, uid, chapterno)
SETTINGS index_granularity = 8192;

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

  • user_id: 32位无符号整数
  • message:一个 String数据类型,它取代了其他数据库系统中的VARCHAR、BLOB、CLOB等类型
  • 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排序。

修改表

# 增加表列
# ADD COLUMN [IF NOT EXISTS] name [type] [default_expr] [codec] [AFTER name_after]
alter table qx_tj.tb_request_record add column device String COMMENT '设备号' after ctime;
alter table qx_tj.tb_request_record add column browser String COMMENT '测试字段' ;
# 删除列
# DROP COLUMN [IF EXISTS] name
ALTER TABLE  qx_tj.tb_request_record DROP COLUMN client

# 修改列
# MODIFY COLUMN [IF EXISTS] name [type] [default_expr] [TTL]
ALTER TABLE qx_tj.tb_request_record MODIFY COLUMN browser Array(String)

# 增加注释
# COMMENT COLUMN [IF EXISTS] name 'comment'
ALTER TABLE qx_tj.tb_request_record COMMENT COLUMN browser 'Ttest'

查看表结构

desc qx_tj.tb_request_record;

Joining Tables

ClickHouse完全支持连接,支持所有标准的SQL JOIN类型。语法应该看起来很熟悉,你可以在JOIN的docs页面查看所有细节:

# SELECT * FROM qx_tj.tableName JOIN qx_tj.tableB ON qx_tj.tableName.actor_id = qx_tj.tableB.id
select uniqExact(a.bid) as totoal_bid from gonovel.tb_book_tj a inner join gonovel.tb_book b on b.id = a.bid where a.day='2022-01-01'
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值