龙空技术网

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

Lansonli 551

前言:

现时大家对“mysql映射表的作用”都比较注意,各位老铁们都想要学习一些“mysql映射表的作用”的相关知识。那么小编也在网摘上汇集了一些对于“mysql映射表的作用””的相关文章,希望各位老铁们能喜欢,我们快快来了解一下吧!

#头条创作挑战赛#

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

ClickHouse中支持在创建数据库时指定引擎,目前比较常用的两种引擎为默认引擎和MySQL数据库引擎。

一、Ordinary默认数据库引擎

Ordinary就是ClickHouse中默认引擎,如果不指定数据库引擎创建的就是Ordinary数据库引擎,在这种数据库下面可以使用任意表引擎。创建时需要注意,Ordinary首字母需要大写,不然会抛出异常。

示例:

#在ClickHouse中创建数据库test1,指定数据库引擎为Ordinarynode1 :) create database test1 engine = Ordinary;CREATE DATABASE test1ENGINE = OrdinaryOk.0 rows in set. Elapsed: 0.013 sec. #查看test1数据库建库信息,显示数据库引擎为Ordinarynode1 :) 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 test2Ok.0 rows in set. Elapsed: 0.003 sec. #查看test2数据库建库信息,显示数据库引擎为Ordinarynode1 :) 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_tablemysql> 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_dbENGINE = 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_tablenode1 :) 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_tablenode1 :) 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)

标签: #mysql映射表的作用