洞察纵观鸿蒙next版本,如何凭借FinClip加强小程序的跨平台管理,确保企业在数字化转型中的高效运营和数据安全?
970
2022-08-31
大数据ClickHouse(五):数据库引擎介绍与实例演示
文章目录
数据库引擎介绍与实例演示
一、Ordinary默认数据库引擎
二、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)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~