clickhouse 数据库介绍
学习引用自:朱凯. ClickHouse原理解析与应用实践(全方位解析ClickHouse,ClickHouse华人社区与大数据领域多位专家联袂推荐) (数据库技术丛书) (Chinese Edition) Kindle 版本.
数据库气到了命名空间的作用,可以有效规避命名冲突的问题,也为后续的数据隔离提供了支撑。
1 | 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 |
查看新建立的表
1 | [root@VM_1_237_centos clickhouse]# cd metadata/ |
创建数据表
ClickHouse数据表的定义语法,是在标准SQL的基础之上建立的,所以熟悉数据库的读者们在看到接下来的语法时,应该会感到很熟悉。
ClickHouse目前提供了三种最基本的建表方法,
第一种,单独建表
其中,第一种是常规定义方法,它的完整语法如下所示:
1 | CREATE TABLE [IF NOT EXISTS] [db_name.]table_name( |
使用[db_name.]参数可以为数据表指定数据库,如果不指定此参数,则默认会使用default数据库。
例如执行下面的语句,可以在default数据库中建立一个内存表,数据库重启后数据就会丢失:
1 | CREATE TABLE hits_v1(Title String,URL String,EventTime DateTime) ENGINE = Memory; |
第二种,复制建表
第二种定义方法是复制其他表的结构,具体语法如下所示:
1 | 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 | CREATE TABLE IF NOT EXISTS new_db.hits_v1 AS |
上述语句将会把default.hits_v1的表结构原样复制到new_db.hits_v1,并且ENGINE表引擎可以与原表不同。
第三种,查询建表
第三种定义方法是通过SELECT子句的形式创建,它的完整语法如下:
1 | CREATE TABLE [IF NOT EXISTS][db_name.] table_name ENGINE = engine AS SELECT… |
在这种方式下,不仅会根据SELECT子句建立相应的表结构,同时还会将SELECT子句查询的数据顺带写入,
例如执行下面的语句:
1 | CREATE TABLE IF NOT EXISTS hits_v1_1 ENGINE = Memory AS |
上述语句会将
SELECT * FROM hits_v1 的查询结果一并写入数据表。
总结
ClickHouse和大多数数据库一样,使用DESC查询可以返回数据表的定义结构。如果想删除一张数据表,
则可以使用下面的DROP语句:
1 | DROP TABLE [IF EXISTS][db_name.]table_name |