【Clickhouse】常用语法

部署

  • 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 – 百分行以下的数据量存储选择
  • 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;