1、Clickhouse创建数据库的语法,如下所示:
1 CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]
使用案例,如下所示:
1 master :) CREATE DATABASE IF NOT EXISTS gab_db;
2
3 CREATE DATABASE IF NOT EXISTS gab_db
4
5 Ok.
6
7 0 rows in set. Elapsed: 0.013 sec.
8
9 master :) show databases;
10
11 SHOW DATABASES
12
13 ┌─name───────────────────────────┐
14 │ _temporary_and_external_tables │
15 │ default │
16 │ gab_db │
17 │ system │
18 └────────────────────────────────┘
19
20 4 rows in set. Elapsed: 0.012 sec.
21
22 master :)
2、默认情况下,ClickHouse使用的是原生的数据库引擎Ordinary(在此数据库下可以使用任意类型的表引擎,在绝大多数情况下都只需使用默认的数据库引擎)。当然也可以使用Lazy引擎和MySQL引擎,比如使用MySQL引擎,可以直接在ClickHouse中操作MySQL对应数据库中的表。假设MySQL中存在一个名为Clickhouse的数据库,可以使用下面的方式连接MySQL数据库。
1 -- --------------------------语法-----------------------------------
2 CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
3 ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
4
5 -- --------------------------示例------------------------------------
6 CREATE DATABASE mysql_db ENGINE = MySQL('192.168.0.109:3306', 'clickhouse', 'root', '123456');
7
8
9 -- ---------------------------操作-----------------------------------
10 master :) CREATE DATABASE mysql_db ENGINE = MySQL('192.168.0.109:3306', 'clickhouse', 'root', '123456');
11
12 CREATE DATABASE mysql_db
13 ENGINE = MySQL('192.168.0.109:3306', 'clickhouse', 'root', '123456')
14
15 Ok.
16
17 0 rows in set. Elapsed: 0.011 sec.
18
19 master :) show databases;
20
21 SHOW DATABASES
22
23 ┌─name───────────────────────────┐
24 │ _temporary_and_external_tables │
25 │ default │
26 │ gab_db │
27 │ mysql_db │
28 │ system │
29 └────────────────────────────────┘
30
31 5 rows in set. Elapsed: 0.006 sec.
32
33 master :) use mysql_db;
34
35 USE mysql_db
36
37 Ok.
38
39 0 rows in set. Elapsed: 0.002 sec.
40
41 master :) show tables;
42
43 SHOW TABLES
44
45 Ok.
46
47 0 rows in set. Elapsed: 0.012 sec.
48
49 master :) show tables;
50
51 SHOW TABLES
52
53 ┌─name────┐
54 │ user_db │
55 └─────────┘
56
57 1 rows in set. Elapsed: 0.011 sec.
58
59 master :) select * from user_db;
60
61 SELECT *
62 FROM user_db
63
64 ┌─id─┬─name─────┬─age─┬─address──────┐
65 │ 1 │ zhangsan │ 22 │ 河南省新乡市 │
66 └────┴──────────┴─────┴──────────────┘
67
68 1 rows in set. Elapsed: 0.020 sec.
69
70 master :)
如果创建的时候报下面的错误,是因为权限的问题,执行下面的命令,解决问题即可。
1 master :) CREATE DATABASE mysql_db ENGINE = MySQL('192.168.0.109:3306', 'clickhouse', 'root', '123456');
2
3 CREATE DATABASE mysql_db
4 ENGINE = MySQL('192.168.0.109:3306', 'clickhouse', 'root', '123456')
5
6
7 Received exception from server (version 20.8.3):
8 Code: 501. DB::Exception: Received from localhost:9000. DB::Exception: Cannot create MySQL database, because Poco::Exception. Code: 1000, e.code() = 1045, e.displayText() = mysqlxx::ConnectionFailed: Access denied for user 'root'@'192.168.0.109' (using password: YES) ((nullptr):3306),
9
10 0 rows in set. Elapsed: 0.042 sec.
执行下面两行命令,解决问题即可。
1 grant all privileges on *.* to root@'%' identified by '123456';
2
3 FLUSH PRIVILEGES;
3、Clickhouse创建数据表的,语法如下所示:
1 CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
2 (
3 name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1],
4 name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2],
5 ...
6 ) ENGINE = engine
使用案例,如下所示:
1 master :)
2 master :) show tables;
3
4 SHOW TABLES
5
6 Ok.
7
8 0 rows in set. Elapsed: 0.008 sec.
9
10 master :) create table user_db(
11 :-] id Int32,
12 :-] name String
13 :-] )engine=Memory;
14
15 CREATE TABLE user_db
16 (
17 `id` Int32,
18 `name` String
19 )
20 ENGINE = Memory
21
22 Ok.
23
24 0 rows in set. Elapsed: 0.003 sec.
25
26 master :) show tables;
27
28 SHOW TABLES
29
30 ┌─name────┐
31 │ user_db │
32 └─────────┘
33
34 1 rows in set. Elapsed: 0.007 sec.
35
36 master :)
上面命令是创建了一张内存表,即使用的是Memory引擎。表引擎决定了数据表的特性,也决定了数据将会被如何存储及加载。Memory引擎是ClickHouse最简单的表引擎,数据只会被保存在内存中,在服务重启时数据会丢失。
4、Clickhouse的数据类型,在创建数据表的时候指定字段的数据类型,数据类型在使用的时候是区分大小写的,所以在定义字段的时候一定注意数据类型的书写。
4.1、整数数据类型Int Ranges ,Clickhouse直接使用Int8、Int16、Int32、Int64指代4种大小的Int类型,其末尾的数据正好表明了占用字节的大小(1个节点 = 8位)。
名称 | 大小(字节) | 范围 | 普遍观念 |
Int8 | 1个字节 | -128到127 | Tinyint |
Int16 | 2个字节 | -32768到32767 | Smallint |
Int32 | 4个字节 | -2147483648到2147483647 | int |
Int64 | 8个字节 | -9223372036854775808到9223372036854775807 | Bigint |
具体对应关系,如下所示:
Int8 - [-128 : 127]
Int16 - [-32768 : 32767]
Int32 - [-2147483648 : 2147483647]
Int64 - [-9223372036854775808 : 9223372036854775807]
整数数据类型Uint Ranges,Clickhouse支持无符号的整数,使用前缀U表示,都表示的是正数,即无负数表示。
UInt8 - [0 : 255]
UInt16 - [0 : 65535]
UInt32 - [