Clickhouse基础

Clickhouse基础

  • 基础资料
  • 客户端工具安装(Centos 7.6)
  • 常用SQL语句
  • 杀掉慢SQL
  • 数据类型
  • 数据库引擎和表引擎

基础资料

基础资料官网都有,中文版,这里就不复制粘贴了,想了解自行前往:https://clickhouse.tech/docs/zh/。

客户端工具安装(Centos 7.6)

安装命令

sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
yum install clickhouse-client

连接命令

clickhouse-client --host clickhousehost --user root --password ***

clickhouse服务的启停

service clickhouse-server start
service clickhouse-server stop
service clickhouse-server restart

常用SQL语句

在执行SQL语句前,一定要充分理解on cluster在SQL中的含义,on cluster是指在集群中所有实例都执行该语句,如果不加

-- 查看数据库
show databases;

-- 删除数据库
drop database ***;

--  切换数据库,clickhouse实例的默认数据库:default
use default;

-- 查看数据库下的表
show tables;

-- 删除表
drop table ***.*** on cluster default;

-- 创建数据库
CREATE DATABASE IF NOT EXISTS database_test on cluster default;

-- 创建表,两个注意项:
-- 1、表名千万不要加``
-- 2、ch是多实例,建表如果不加on cluster default,会只在当前实例上创建,如果连接的是另外一个实例,查询会提示表不存在
-- 3、选择适合的表引擎,这点很重要,后面会对表引擎进行简单介绍
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = engine

CREATE TABLE tmp_1 on cluster default 
(
    id Nullable(String), 
    name Nullable(String), 
    count Nullable(UInt64), 
    price Nullable(Float64)
) 
ENGINE = MergeTree() 
ORDER BY tuple();

-- 删除语句:部分表引擎不支持更新删除
ALTER TABLE database_test.tmp_1 DELETE WHERE name = 'tv'

-- 更新语句:部分表引擎不支持更新删除
ALTER TABLE database_test.tmp_1 UPDATE count=1000 WHERE name='cd';

-- 清空表
TRUNCATE TABLE database_test.tmp_1 ON CLUSTER default

杀掉慢SQL

select * from system.processes;
--  通过上面语句取定要杀掉的进程,接下来根据query_id来kill
kill query where query_id = '****' 
-- 杀死test用户下所有进程
kill query where user = 'test'

数据类型

MySQL ClickHouse
UNSIGNED TINYINT UInt8
TINYINT Int8
UNSIGNED SMALLINT UInt16
SMALLINT Int16
UNSIGNED INT, UNSIGNED MEDIUMINT UInt32
INT, MEDIUMINT Int32
UNSIGNED BIGINT UInt64
BIGINT Int64
FLOAT Float32
DOUBLE Float64
DATE Date
DATETIME, TIMESTAMP DateTime
BINARY FixedString

数据库引擎和表引擎

数据库引擎官方文档: https://clickhouse.tech/docs/en/engines/database-engines
数据库引擎默认是Ordinary,在这种数据库下面的表可以是任意类型引擎,所以一般情况下使用默认就好了,重点介绍下表引擎。
Clickhouse基础_第1张图片
生产环境中常用的表引擎是MergeTree系列,也是官方主推的引擎,单纯的MergeTree是无法达到实时和高可用的要求,所以我们还会叠加Replicated和Distributed。
MergeTree是基础引擎,有主键索引、数据分区、数据副本、数据采样、删除和修改等功能,
ReplacingMergeTree:去重
SummingMergeTree:汇总求和
AggregatingMergeTree:聚合
CollapsingMergeTree:折叠
VersionedCollapsingMergeTree:版本折叠
GraphiteMergeTree:压缩汇总
Integration系列则用于集成外部的数据源,例如:MySQL

ClickHouse数据存储的高可用主要依赖于ReplicatedMergeTree,通过与zk的结合,实现了复制表。另外高性能,则依赖于Distributed引擎实现了分布式表,这样就可以在所有分片上并行查询。一般使用中,我们都是将二者一同使用。
建表示例:

-- database_test是数据库名,shard和replica不用处理,执行语句时会自动替换
-- 先创建ReplicatedMergeTree表
CREATE TABLE tmp_1 on cluster default (id UInt64,  name String,  month_no String) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/database_test/tmp_1', '{replica}') PARTITION BY month_no ORDER BY (name);

-- 再在ReplicatedMergeTree表基础上创建Distributed表
CREATE TABLE IF NOT EXISTS dis_1 on cluster default AS tmp_1 ENGINE = Distributed(default, default, tmp_1, rand());

-- 可以在副本表中插入,也可以在分布式表中插入
INSERT INTO tmp_1 VALUES (1, 'a', '202001');
INSERT INTO dis_1 VALUES (2, 'b', '202002');

-- 删除时,两张表都需要删除
drop table dis_1 on cluster
drop table tmp_1 on cluster

你可能感兴趣的:(clickshouse,大数据)