大数据ClickHouse(五):数据库引擎介绍与实例演示
数据库引擎介绍与实例演示
ClickHouse中支持在创建数据库时指定引擎,目前比较常用的两种引擎为默认引擎和MySQL数据库引擎。
一、Ordinary默认数据库引擎
Ordinary就是ClickHouse中默认引擎,如果不指定数据库引擎创建的就是Ordinary数据库引擎,在这种数据库下面可以使用任意表引擎。创建时需要注意,Ordinary首字母需要大写,不然会抛出异常。
- 示例:
#在ClickHouse中创建数据库test1,指定数据库引擎为Ordinary
node1 :) create database test1 engine = Ordinary;
CREATE DATABASE test1
ENGINE = Ordinary
Ok.
0 rows in set. Elapsed: 0.013 sec.
#查看test1数据库建库信息,显示数据库引擎为Ordinary
node1 :) show create database test1;
SHOW CREATE DATABASE test1
┌─statement──────────────────────────────┐
│ CREATE DATABASE test1 │
│ ENGINE = Ordinary │
└────────────────────────────────────────┘
1 rows in set. Elapsed: 0.002 sec.
#在ClickHouse中创建数据库test2,这里默认不指定任何数据库引擎
node1 :) create database test2;
CREATE DATABASE test2
Ok.
0 rows in set. Elapsed: 0.003 sec.
#查看test2数据库建库信息,显示数据库引擎为Ordinary
node1 :) show create database test2;
SHOW CREATE DATABASE test2
┌─statement─────────────────────────────┐
│ CREATE DATABASE test2 │
│ ENGINE = Ordinary │
└───────────────────────────────────────┘
1 rows in set. Elapsed: 0.002 sec.
二、MySQL数据库引擎
MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中,并允许对表进行INSERT插入和SELECT查询,方便在ClickHouse与MySQL之间进行数据交换。这里不会将MySQL的数据同步到ClickHouse中,ClickHouse就像一个壳子,可以将MySQL的表映射成ClickHouse表,使用ClickHouse查询MySQL中的数据,在MySQL中进行的CRUD操作,可以同时映射到ClickHouse中。
MySQL数据库引擎会将对其的查询转换为MySQL语法并发送到MySQL服务器中,因此可以执行诸如SHOW TABLES或SHOW CREATE TABLE之类的操作,但是不允许创建表、修改表、删除数据、重命名操作。
ClickHouse中创建库使用MySQL引擎语法如下:
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
以上参数解释:
- host:port — 链接的MySQL地址。
- database — 链接的MySQL数据库。
- user — 链接的MySQL用户。
- password — 链接的MySQL用户密码。
注意:“MySQL”引擎的写法严格区分大小写。
在ClickHouse中使用MySQL引擎建库,将MySQL库中数据映射到ClickHouse中,mysql库中表字段类型与ClickHouse表字段类型的映射如下,这里每种类型在ClickHouse中都支持Nullable,即可空。
Mysql |
ClickHouse |
---|---|
UNSIGNED TINYINT |
UInt8 |
TINYINT |
Int8 |
UNSIGNED SMALLINT |
UInt16 |
SMALLINT |
Int16 |
UNSIGNED INT UNSIGNED MEDIUMINT |
UInt32 |
INT, MEDIUMINT |
Int32 |
UNSIGNED BIGINT |
UInt64 |
BIGINT |
Int64 |
FLOAT |
Float32 |
DOUBLE |
Float64 |
DATE |
Date |
DATETIME, TIMESTAMP |
DateTime |
BINARY |
FixedString |
注意:
- 在Mysql中UNSIGNED 表示无符号,就是没有负数。
- TINYINT代表有符号的范围是-128-127,无符号的范围是从0到255的整型数据,占位大小为1字节。
- SMALLINT:一个小整数。有符号的范围是-2^15(-32,768) 到 2^15-1(32,767)的整型数据,无符号的范围是0到65535,占位大小为2个字节。
- MEDIUMINT:一个中等大小整数,有符号的范围是-8388608到8388607,无符号的范围是0到16777215,占位大小为3个字节。
- INT:一个正常大小整数。有符号的范围是-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据(所有数字),无符号的范围是0到4294967295,占位大小为 4 个字节。
示例:ClickHouse映射MySQL中的表
#登录mysql 在mysql中创建test数据库
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
#在mysql test库中新建表 mysql_table
mysql> use test;
mysql> create table mysql_table(id int ,name varchar(255));
#向mysql表 mysql_table中插入两条数据
mysql> insert into mysql_table values (1,"zs"),(2,"ls");
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
#在ClickHouse中创建mysql引擎的数据库,与MySQL交换数据
node1 :) CREATE DATABASE mysql_db ENGINE = MySQL('node2:3306', 'test', 'root', '123456');
CREATE DATABASE mysql_db
ENGINE = MySQL('node2:3306', 'test', 'root', '123456')
Ok.
0 rows in set. Elapsed: 0.032 sec.
#在ClickHouse中使用mysql_db库,并展示表,看是否映射MySQL中的表
node1 :) use mysql_db;
node1 :) show tables;
SHOW TABLES
┌─name────────┐
│ mysql_table │
└─────────────┘
1 rows in set. Elapsed: 0.005 sec.
#在ClickHouse中查询表mysql_table
node1 :) select * from mysql_table;
SELECT *
FROM mysql_table
┌─id─┬─name─┐
│ 1 │ zs │
│ 2 │ ls │
└────┴──────┘
2 rows in set. Elapsed: 0.012 sec.
#在ClickHouse中查看表 mysql_table的描述,发现映射成ClickHouse中的字段类型。
node1 :) desc mysql_table;
DESCRIBE TABLE mysql_table
┌─name─┬─type────────────┬
│ id │ Nullable(Int32) │
│ name │ Nullable(String)│
└──────┴─────────────────┴
2 rows in set. Elapsed: 0.005 sec.
示例:在MySQL对应的表中插入删除数据,对应的在ClickHouse中也能插入和删除的数据
#在MySQL中 test库下的mysql_table中插入和删除一条数据
mysql> insert into mysql_table values (3,"ww");
Query OK, 1 row affected (0.01 sec)
mysql> delete from mysql_table where id = 1;
Query OK, 1 row affected (0.01 sec)
#在ClickHouse中 mysql_db库下查询表mysql_table
node1 :) select * from mysql_table;
SELECT *
FROM mysql_table
┌─id─┬─name─┐
│ 2 │ ls │
│ 3 │ ww │
└────┴──────┘
2 rows in set. Elapsed: 0.005 sec.
示例:在MySQL对应的库test下创建新的表a,ClickHouse中也可以展示
#在MySQL中 test库下创建库a,并插入数据
mysql> create table a (id int,name varchar(255),age int);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into a values (1,"zhangsan",18),(2,"lisi",19);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
#在ClickHouse中 mysql_db库下查询表a是否存在,同时查看数据
node1 :) show tables;
SHOW TABLES
┌─name────────┐
│ a │
│ mysql_table │
└─────────────┘
2 rows in set. Elapsed: 0.005 sec.
node1 :) select * from a;
SELECT *
FROM a
┌─id─┬─name─────┬─age─┐
│ 1 │ zhangsan │ 18 │
│ 2 │ lisi │ 19 │
└────┴──────────┴─────┘
2 rows in set. Elapsed: 0.025 sec.
示例:在ClickHouse中向表a中插入数据,可以在msyql中查询到。但是ClickHouse中不支持创建表和删除数据操作。
#在ClickHouse中向表a中插入数据
node1 :) insert into a values(3,'wangwu',20);
#在MySQL中查询表a数据
mysql> select * from a;
+------+----------+------+
| id | name | age |
+------+----------+------+
| 1 | zhangsan | 18 |
| 2 | lisi | 19 |
| 3 | wangwu | 20 |
+------+----------+------+
3 rows in set (0.00 sec)
- 点赞
- 收藏
- 关注作者
评论(0)