部署
- Linux本地安装
rpm -ivh *.rpm
- 后台启动服务端
nohup clickhouse-server –config-file=/etc/clickhouse-server/config.xml >null 2>&1 &
- 进入客户端
clickhouse-client
数据类型
- 整数型
Int8 [-128 : 127]
Int16 [-32768 : 32767]
Int32 [-2147483648 : 2147483647]
Int64 [-9223372036854775808 : 9223372036854775807]
- 自然数
UInt8 [0 : 255]
UInt16 [0 : 65535]
UInt32 [0 : 4294967295]
UInt64 [0 : 18446744073709551615]
- 浮点型
Float32 – float
Float64 – double
- 其他数字类型
lnf – 正无穷
-lnf – 负无穷
NaN – 非数字
- 布尔型
和SQLite一样,没有布尔类型,可以用Unit8的0和1代替
- 字符串
String – 类似Text,不限长度
FixedString(N) – 固定长度为N的字符串
- 枚举类型
Enum8 – 枚举范围较小
Enum16 – 枚举范围较大
数组
一维数组和传统数据库一致,但不支持多维数组
toTypeName() 函数可以查看变量的数据类型
select array(1,2,3,4);
select array(1,2,3,4) as x, toTypeName(x);
元组
Tuple,和Scala元组一致,可以视为一个集合
与数组不同的是,在同一个元组内,允许存在不同数据类型的元素
toTypeName() 函数可以查看变量的数据类型
select tuple(1, ‘abc’, 12.33);
select tuple(1, ‘abc’, 12.33) as x, toTypeName(x);
嵌套表
一张嵌套表可以定义任意多个嵌套类型字段
但每个字段的嵌套层级只支持一级
create table test_nested (
id Int8,
name String,
hobby Nested(
hid Int8,
h1 String,
h2 String
)
)engine=Memory;
insert into test_nested values (1, ‘zss’, [1,2,3],[‘吃’,’喝’,’睡’],[‘eat’,’drink’,’sleep’]);
insert into test_nested values (2, ‘lss’, [1,2,3],[‘吃’,’喝’,’睡’],[‘eat’,’drink’,’sleep’]);
select id, name, hobby.hid, hobby.h1, hobby.h1[1] from test_nested;
域名类型
Domain,专为IP地址而设立,可以存入IPv4和IPv6两种不同的IP类型
同时存入数据时会有格式检查,不符合规范的错误IP不能写入
create table test_domain1(
id Int8,
ip IPv4
)engine=Memory;
insert into test_domain1 values(1, ‘192.168.133.1’);
insert into test_domain1 values(1, ‘192.168.133’)
数据库
Schema和其他数据库并无二意,不过CK拥有自己的数据库引擎
在引擎类型上面体现了对MySQL的丰富支持
- Ordinary:默认引擎,在绝大多数情况下我们都会使用默认引擎,使用时无须刻意声明。在此数据库下可以使用任意类型的表引擎
- Memory:内存引擎,用于存放临时数据。此类数据库下的数据表只会停留在内存中,不会涉及任何磁盘操作,当服务重启后数据会被清除
- Lazy:日志引擎,此类数据库下只能使用Log系列的表引擎
- Log – 存储大量小表数据,并且会落到本地
默认位置:/var/lib/clickhouse/data/
- TinyLog – 单线程最简单的表引擎,不能并发读写
- StripLog – 百分行以下的数据量存储选择
- Log – 存储大量小表数据,并且会落到本地
- MySQL:MySQL引擎,创建后自动拉取远端MySQL中的数据,并为它们创建MySQL表引擎的数据表
create database remote_mysql engine=MySQL(‘localhost:3306′,’schema’,’user’,’passwd’);
use remote_mysql;
show tables;
需要注意的是,CK只能拉取MySQL表格进行查询,不能创建MySQL表格,或对MySQL进行OLTP操作,且CK不支持事务
- MaterializeMySQL:MySQL数据同步;将MySQL数据全量或增量方式同步到clickhouse中,解决mysql服务并发访问压力过大的问题
数据表
在CK中建表务必要指定表的引擎
–官方示例
create table [if not exists] [db_name.]table_name (
name1 type,
name2 type,
…
) ENGINE=engine;
其他建表、删表、临时表、视图、分区等,皆和Hive语法一致
额外需要注意的是——物化视图
CK可以直接创建物化视图,并把数据落地独立存储
create materialized view mv_log engine=Log populate as select * from log;