Clickhouse基础语法、数据类型、数据表引擎学习

本文介绍了Clickhouse的基础语法,包括创建数据库和数据表,重点讲解了各种数据类型如整数、小数、字符串、枚举、数组、Nested等,并探讨了Clickhouse的高速查询能力及其原因。此外,还详细阐述了数据库引擎和数据表引擎的特性和应用场景,如MergeTree引擎家族。
摘要由CSDN通过智能技术生成

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 - [
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值