大数据ClickHouse(五):数据库引擎介绍与实例演示

举报
Lansonli 发表于 2022/08/12 08:49:18 2022/08/12
【摘要】 ​数据库引擎介绍与实例演示ClickHouse中支持在创建数据库时指定引擎,目前比较常用的两种引擎为默认引擎和MySQL数据库引擎。一、Ordinary默认数据库引擎Ordinary就是ClickHouse中默认引擎,如果不指定数据库引擎创建的就是Ordinary数据库引擎,在这种数据库下面可以使用任意表引擎。创建时需要注意,Ordinary首字母需要大写,不然会抛出异常。示例:#在Clic...

数据库引擎介绍与实例演示

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)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。