一 clickhouse DDL查询

本文详细介绍了ClickHouse的数据库管理,包括建库、建表、默认表达式、临时表、分区表和视图等操作。重点讲解了分区表的创建、删除、复制和数据操作,以及物化视图的使用。

1 数据库

1.1 建库

create database if not exists db_test [ENGINE = engine];

[ENGINE = engine] 代表的是数据库引擎,有5种:
(1) ordinary(默认):可以使用任意类型的表引擎

(2) dictionary:字典引擎,会为所有数据字典创建数据表

(3) memory:内存引擎,断点消失

(4) lazy: 日志引擎

(5) mysql : mysql引擎,会自动拉取远端mysql中的数据并创建mysql表引擎的数据表

数据库的数据会以目录的方式存放在data目录(默认为 /var/lib/clickhouse/data)
还有一个用于恢复的sql文件(默认为 /var/lib/clickhouse/metadata)

1.2 删除数据库, 查看数据库

drop database if exists db_test;
show databases;

2 建表

2.1 传统方法

create table  if not exists db_name (
    name1 [type] [default|materized|alias expr],
    name2 [type] [default|materized|alias expr]
) ENGINE=engine; 

2.2 从已存在的表中只复制表结构

create table  if not exists tablename1 as tablename2 [ENGINE=engine];

2.3 从已存在的表中复制表结构和数据

create table  if not exists tablename1 ENGINE=engine as select * from tablename2;

3 默认表达式

name1 [type] [default|materized|alias expr],

默认表达式的定义有三种方式
(1) default: 可以出现在insert,可以通过select * 返回查询,支持持久化
(2) materized: 不可以出现在insert,不可以通过select * 返回查询,支持持久化
(3) alias: 不可以出现在insert,不可以通过select * 返回查询,不支持持久化

如果定义了默认值,不强求定义数据类型,会根据默认值推断出来类型.

create table mytable1(
    id String,
    c1 default 1000,
    c2 String default c1
) engine = TinyLog;

insert into mytable1(id) values('A000') ;

select c1,c2,toTypeName(c1),toTypeName(c2) from mytable1;

在这里插入图片描述
c1 会根据默认值推断出来,但c2有明确指出来类型所以用指明的类型.

可以通过alter 语句修改默认值

alter table mytable1 modify column c1 default 10001;

4 临时表

5 分区表

create table partition_v1(
	....
)ENGINE = MergeTree()
PARTITION BY toYYYYMM(EvenTime)
ORDER BY ID

6 视图

视图分两种:普通视图和物化视图,物化视图有独立的存储,而普通的视图只是一层简单的查询代理.

6.1 普通视图

create view if not exists view_name as select ...

6.2 物化视图

create view if not exists db_test.view_mytable2 [ENGINE=engine] POPULATE AS select 

使用 POPULATE 修饰符会将原表的数据一并写入视图.

7 表的操作

7.1 增加字段

alter table testcol_v1 add column if not exists os String default 'wo';

7.2 修改数据类型

alter table tablename modify column name type;
alter table tablename modify column name String;

7.3 删除已有字段

alter table tablename drop column columnname

该列的数据也会被删除

8数据分区的基本操作

parts 系统表专门用来查询分区信息.

8.1 删除指定分区

alter table tablename drop partition partition_name

8.2 复制分区数据

将A表的分区复制到B表:
条件:
1 两张表有相同的分区键
2 两张表的结结构相同

alter table B replace partition partition_name fron A

8.3 重置分区

alter table tablename clean column column_name in partition partition_name

8.4 卸载于装载分区

卸载分区会把数据移动到detached子目录下
装载是相反的过程.
在detached中的数据系统不会自动清除.

卸载:

alter table tablename detach partition partition_name

装载:

alter table tablename attach partition partition_name
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值