Click house笔记1.1

本文章是阅读 朱凯著的《ClickHouse原理解析与应用实践》的个人读书笔记总结,如有偏差与原著为主,只供学习参考,谢绝转载。
在这里插入图片描述
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)

About name

**C**lick Stream 
Data  Ware**H**ouse 

数据类型

基础类型

在这里插入图片描述

数值类型

整数

在这里插入图片描述

浮点数
定点数

更改精度的数值运算
两种形式可以申明定点
1.简写方式

Decimal32(S)、Decimal64(S)、 Decimal128(S)

2.原生方式

Decimal(P,S)
·P代表精度,决定总位数(整数部分+小数部分),取值范围是1 ~38;
·S代表规模,决定小数位数,取值范围是0~P。

简写和原生方式对应关系
在这里插入图片描述

字符串在这里插入图片描述

时间类型

在这里插入图片描述

复合类型在这里插入图片描述

特殊类型

在这里插入图片描述

数据库

数据表

建表

常规建表

CREATE TABLE [IF NOT EXISTS] [db_name.]table_name ( 
name1 [type] [DEFAULT|MATERIALIZED|ALIAS expr], 
name2 [type] [DEFAULT|MATERIALIZED|ALIAS expr],
省略… ) ENGINE = engine
create table if not exists db_name.table_name(

)
Enging=(,)
partition by
order by()
sample by 
SETTINGS index_granularity = 8192

ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/ods_balance_history', '{replica}') 
PARTITION BY toYYYYMMDD(ds) 
ORDER BY (hr, time, user_id, asset, business, btype, function) 
SAMPLE BY user_id SETTINGS index_granularity = 8192


复制其他表建表

select建表

临时表temporary

临时表的优先级是大于普通表,当两张数据表名称相同的时候,会优先读取临时表的数据。
只支持Memory表引擎,如果会话结束,数据表就会被销毁;临时表不属于任何数据库,所以在它的建表语句中,既没有数据库参数也没有表引擎参数。

create temporary table if not exists db_name.table_name

关于字段定义

明确定义的数据类型优先于默认值的定义
表字段支持三种默认值表达式的定义方法,分别是DEFAULT、 MATERIALIZED和ALIAS。
虽然提供了三种,但除了DEFAULT,其他限制很多,不建议使用,建表时强烈推荐使用明确定义数据类型。

分区

数据分区(partition)和数据分片(shard)是完全不同的两个概念。数据分区是针对本地数据而言的,是数据的一种纵向切分。而数据分片是数据的一种横向切分。
目前只有合并树(MergeTree)家族系列的表引擎才支持数据分区。

分区规则

MergeTree数据分区的规则由分区ID决定
分区ID拥有四种规则:
1.不指定分区键:分区ID默认取名为all
2.使用整型:有符号整型和无符号整型,直接按照该整型的字符形式输出
3.使用日期类型,按照YYYYMMDD进行格式化后的字符形式输出。
4.其他类型:通过128位Hash算法取其Hash值作为分区ID的取值。
命名规则,分区目录的合并过程以及一级索引…略(6.3,6.4二级索引)

PARTITION BY toYYYYMMDD(ds) 

分区键不应该使用粒度过细的数据字段。例如,按照小时分区,将会带来分区数量的急剧增长,从而导致性能下降。

复制指定分区

将A表的分区数据复制到B表

ALTER TABLE B REPLACE PARTITION 201907 FROM A

要求满足两个前提条件:
1.两张表需要拥有相同的分区键;
2.它们的表结构完全相同。

清除分区内某列数据 CLEAR COLUMN

没啥用的,将某一列数据全部清空改为默认值,很鸡肋的功能,反正我没用过

ALTER TABLE tb_name CLEAR COLUMN column_name IN PARTITION partition_expr

删除指定分区

在建表时设置月日期作为分区的话,可以删除整月

ALTER TABLE table_name DROP PARTITION 201907

卸载与装载分区-DETACH

分区被卸载后,它的物理数据并没有删除,而是被转移到了当前数据表目录的detached子目录下。
卸载:

ALTER TABLE tb_name DETACH PARTITION partition_expr

装载

ALTER TABLE tb_name ATTACH PARTITION partition_expr

记住,一旦分区被移动到了detached子目录,就代表它已经脱离了ClickHouse的管理,ClickHouse并不会主动清理这些文件。

备份与还原分区

视图

普通视图

不会存储任何数据

CREATE VIEW [IF NOT EXISTS] [db_name.]view_name AS SELECT ...

物化视图

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值