clickhouse database的创建和引擎


clickhouse 数据库介绍

学习引用自:朱凯. ClickHouse原理解析与应用实践(全方位解析ClickHouse,ClickHouse华人社区与大数据领域多位专家联袂推荐) (数据库技术丛书) (Chinese Edition) Kindle 版本.

数据库气到了命名空间的作用,可以有效规避命名冲突的问题,也为后续的数据隔离提供了支撑。

1
2
create database if not exists db_name [ENGINE = engine]

其中,if not exists 表示如果已经存在一个同名的数据库,则会忽略后续的创建过程;
[ENGINE=engine]表示数据库所使用的的引擎类型,clickhouse也是支持设置引擎的。

创建数据库

数据库目前一共支持5种引擎。

1、Ordinary:默认引擎

在绝大多数情况下我们都会使用默认引擎,使用时无须刻意声明。在此数据库下可以使用任意类型的表引擎。

2、Dictionary:字典引擎

此类数据库会自动为所有数据字典创建它们的数据表。

3、Memory:内存引擎

用于存放临时数据。此类数据库下的数据表只会停留在内存中,不会涉及任何磁盘操作,当服务重启后数据会被清除。

4、Lazy:日志引擎

此类数据库下只能使用Log系列的表引擎。

5、MySQL:MySQL引擎

此类数据库下会自动拉取远端MySQL中的数据,并为它们创建MySQL表引擎的数据表。

在绝大多数情况下都只需使用默认的数据库引擎。例如执行下面的语句,即能够创建属于我们的第一个数据库:

1
create database if not exists test_db

查看新建立的表

script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@VM_1_237_centos clickhouse]# cd metadata/
[root@VM_1_237_centos metadata]# ll
total 56
drwxr-x--- 2 clickhouse clickhouse 12288 Sep 16 06:04 bi_warehouse
-rw-r----- 1 clickhouse clickhouse 47 Mar 31 16:18 bi_warehouse.sql
drwxr-x--- 2 clickhouse clickhouse 4096 May 27 11:20 default
drwxr-x--- 2 clickhouse clickhouse 4096 Mar 25 22:50 mysql_db
-rw-r----- 1 clickhouse clickhouse 109 Mar 25 22:50 mysql_db.sql
drwxr-x--- 2 clickhouse clickhouse 4096 Mar 25 20:29 system
drwxr-x--- 2 clickhouse clickhouse 12288 Aug 5 11:49 test
drwxr-x--- 2 clickhouse clickhouse 4096 Sep 16 17:19 test_db
-rw-r----- 1 clickhouse clickhouse 42 Sep 16 17:19 test_db.sql
-rw-r----- 1 clickhouse clickhouse 39 Mar 25 13:50 test.sql
[root@VM_1_237_centos metadata]# ```shell script^C
[root@VM_1_237_centos metadata]# cat test_db.sql
ATTACH DATABASE test_db
ENGINE = Ordinary

创建数据表

ClickHouse数据表的定义语法,是在标准SQL的基础之上建立的,所以熟悉数据库的读者们在看到接下来的语法时,应该会感到很熟悉。
ClickHouse目前提供了三种最基本的建表方法,

第一种,单独建表

其中,第一种是常规定义方法,它的完整语法如下所示:

1
2
3
4
5
CREATE TABLE [IF NOT EXISTS] [db_name.]table_name(
name1 [type] [DEFAULT|MATERIALIZED|ALIASexpr],
name2 [type] [DEFAULT|MATERIALIZED|ALIASexpr],
省略…)ENGINE=engine

使用[db_name.]参数可以为数据表指定数据库,如果不指定此参数,则默认会使用default数据库。
例如执行下面的语句,可以在default数据库中建立一个内存表,数据库重启后数据就会丢失:

1
CREATE TABLE hits_v1(Title String,URL String,EventTime DateTime) ENGINE = Memory;

第二种,复制建表

第二种定义方法是复制其他表的结构,具体语法如下所示:

1
2
CREATE TABLE [IF NOT EXISTS] [db_name1.]table_name AS [db_name2.]table_name2 [ENGINE=engine]

这种方式支持在不同的数据库之间复制表结构,例如下面的语句:
创建新的数据库 CREATE DATABASE IF NOT EXISTS new_db 将 default.hits_v1的结构复制到new_db.hits_v1

1
2
CREATE TABLE IF NOT EXISTS new_db.hits_v1 AS 
default.hits_v1 ENGINE=TinyLog

上述语句将会把default.hits_v1的表结构原样复制到new_db.hits_v1,并且ENGINE表引擎可以与原表不同。

第三种,查询建表

第三种定义方法是通过SELECT子句的形式创建,它的完整语法如下:

1
2
CREATE TABLE [IF NOT EXISTS][db_name.] table_name ENGINE = engine AS SELECT

在这种方式下,不仅会根据SELECT子句建立相应的表结构,同时还会将SELECT子句查询的数据顺带写入,
例如执行下面的语句:

1
2
CREATE TABLE IF NOT EXISTS hits_v1_1 ENGINE = Memory AS 
SELECT * FROM hits_v1

上述语句会将
SELECT * FROM hits_v1 的查询结果一并写入数据表。

总结

ClickHouse和大多数数据库一样,使用DESC查询可以返回数据表的定义结构。如果想删除一张数据表,
则可以使用下面的DROP语句:

1
DROP TABLE [IF EXISTS][db_name.]table_name

文章作者: Callable
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Callable !
评论
  目录