avatar

Catalog
Clickhouse环境搭建与基本使用

环境搭建

下载安装包

根据不同发行版Linux,从官方下载地址下载合适的安装包

安装顺序

bash
1
2
3
4
rpm -ivh clickhouse-common-static-20.3.11.97-1.el7.x86_64.rpm
rpm -ivh clickhouse-server-common-20.3.11.97-1.el7.x86_64.rpm
rpm -ivh clickhouse-server-20.3.11.97-1.el7.x86_64.rpm
rpm -ivh clickhouse-client-20.3.11.97-1.el7.x86_64.rpm

创建目录

路径随便选,IT给的服务器基本上磁盘都分给了/home,我就习惯安装在/home下

bash
1
2
3
4
5
6
mkdir -p /home/app/clickhouse/log
mkdir -p /home/app/clickhouse/data
mkdir -p /home/app/clickhouse/data_old
mkdir -p /home/app/clickhouse/tmp/
mkdir -p /home/app/clickhouse/format_schemas/
mkdir -p /home/app/clickhouse/user_files/

修改启动脚本

进入vim /etc/init.d/clickhouse-server 修改以下参数

bash
1
2
3
4
CLICKHOUSE_LOGDIR=/home/app/clickhouse/log
CLICKHOUSE_LOGDIR_USER=root
CLICKHOUSE_DATADIR_OLD=/home/app/clickhouse/data_old
CLICKHOUSE_DATADIR=/home/app/clickhouse/data

修改配置文件

进入vim /etc/clickhouse-server/config.xml修改一下路径

Code
1
2
3
4
/home/app/clickhouse/data/
/home/app/clickhouse/tmp/
/home/app/clickhouse/user_files/
/home/app/clickhouse/format_schemas/

启动和验证ClickHouse服务

bash
1
2
3
4
# 启动clickhouse服务
service clickhouse-server start
# 进入数据库交互模式
clickhouse-client -m

添加开机自启动

服务器一般不会关,不用考虑此选项

Code
1
chkconfig clickhouse-server on

基本操作

建表

  • 基本语法

    sql
    1
    2
    3
    4
    5
    6
    CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
    (
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2],
    ...
    ) ENGINE = engine;
  • 示例1:创建了一张内存表,包含字段id和name,这里使用了Memory引擎。Memory引擎是ClickHouse最简单的表引擎,数据只会被保存在内存中,在服务重启时数据会丢失

    sql
    1
    2
    3
    4
    CREATE TABLE table_test(
    id Int32,
    name String
    ) ENGINE=Memory;
  • 示例2:创建一个名为table_test的表,包含String类型的字段uid和md5hash(固定长度为32字节)

    sql
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE table_test
    (
    uid String,
    md5hash FixedString(32)
    )
    ENGINE = MergeTree
    ORDER BY md5hash
    SETTINGS index_granularity = 8192;

    Clickhouse支持多种不同的引擎,表引擎决定了数据表的特性,也决定了数据将会被如何存储及加载。以适用于不同数据量场景下的开发,具体可以参考此文;工作中我处理的数据量较大,因此示例选用了支持插入索引的表引擎MergeTree。关于稀疏索引的参数值8192的含义,可以参考此文

入库

  • 普通插入

    sql
    1
    2
    3
    4
    5
    INSERT INTO table_test VALUES 
    (
    'test',
    '098F6BCD4621D373CADE4E832627B4F6'
    );
  • 插入csv文件中的数据(csv文件中的数据要按照建表时字段的顺序排列

    bash
    1
    cat $f | clickhouse-client --query "INSERT INTO table_test VALUES FORMAT CSV"

查询

  • 常规语法

    sql
    1
    2
    3
    4
    SELECT * 
    FROM table_test
    WHERE md5hash
    IN ('098F6BCD4621D373CADE4E832627B4F6');

    括号内查询的值可以有多个(测试同时容纳1000个没问题,且查询速度足够快),需用逗号隔开

SHOW操作

以下是一些SHOW指令实现的操作,可用于查看不同信息

sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
-- 查看建表信息
SHOW CREATE [TEMPORARY] [TABLE | DICTIONARY] [db.]table [INTO OUTFILE filename] [FORMART format];

-- 查看所有库
SHOW DATABASES [INTO OUTFILE filename] [FORMAT format];
SELECT name FROM system.databases [INTO OUTFILE filename] [FORMAT format];

-- 查看当前服务操作进程
SHOW PROCESSLIST;
SELECT * FROM system.processes

-- 查看所有表
SHOW [TEMPORARY] TABLES [{FROM | IN} ] [LIKE ''|WHERE expr] [LIMIT ][INTO OUTFILE ][FORMAT <format>];
SELECT name FROM system.tables WHERE database = [AND name LIKE ] [LIMIT ][INTO OUTFILE ][FORMAT <format>];

-- 查看所有字典 + 示例
SHOW DICTIONARIES [FROM ] [LIKE ''] [LIMIT ][INTO OUTFILE ][FORMAT <format>];
SELECT name FROM system.dictionaries WHERE database = [AND name LIKE ] [LIMIT ][INTO OUTFILE ][FORMAT <format>];
SHOW DICTIONAARIES FROM db LIKE '%reg%' LIMIT 2;

-- 查看用户权限
SHOW GRANTS [FOR user];

-- 查看用户信息
SHOW CREATE USER [name | CURRENT_USRR];

-- 查看角色信息
SHOW CREATE ROLE name;

-- 查看row policy creation信息
SHOW CREATE [ROW] POLICY name ON [db.]table;

-- 查看 quota信息
SHOW CREATE QUOTA [name | CURRENT]

-- 查看settings profile creation信息
SHOW CREATE [SETTINGS] PROFILE name;

参考链接

Author: cataLoc
Link: http://cata1oc.github.io/2019/03/01/Clickhouse%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E4%B8%8E%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶