大数据学习教程SD版第十三篇【Clickhouse】

Clickhouse 列式数据库

快,简单,yandex开源,C++编写,分析型数据库,SQL查询,列操作快,多样化引擎,高吞吐写入(LSM Tree),多版本数据(Hbase),顺序Append写,数据分区,线程级并行(单条查询能利用整机所有CPU),不适合初始存储,尽量避免join操作(不快,右表加载到内存)

1. Clickhouse 安装

  • 准备工作
  1. 关闭防火墙
# status
systemctl status firewalld
  1. 取消打开文件数限制,并分发配置

/etc/security/limits.conf

/etc/security/limits.d/20-nproc.conf

* soft nofile 65535
* hard nofile 65535
* soft nproc 131072
* hard nproc 131072

ulimit -a :查看修改后的效果

  1. 安装依赖(三台)
yum install -y libtool
yum install -y *unixODBC
  1. 取消selinux,同步配置,重启生效

/etc/selinux/config

SELINUX=disabled

临时关闭

setenforce 0
  • 安装Clickhouse
  1. 下载并安装rpm包(三台)
# rpm包安装之后的路径关系
bin/  -> /usr/bin/xxx
conf/ -> /etc/xxx
lib/  -> /var/lib/xxx
log/  -> /var/log/xxx
  1. 修改配置,同步配置

/etc/clickhouse-server/config.xml

<listen_host>::listen_host>

3.启动

# 会开机自启,关闭开启命令
systemctl disable clickhouse-server

# start
systemctl start clickhouse-server
clickhouse-client -m

2. Clickhouse 数据类型

数据类型 Clickhouse
整型 Int、Nullable(Int) Int 默认是Int32
浮点型 float、double
布尔型
Decimal型 Decimal(20,4)、Nullable(Decimal(20,4))
字符串 String
枚举类型 Enum8、Enum16
时间类型 Date、Datetime、
数组 Array[T]
# enum example
CREATE TABLE t_enum
(
x Enum8('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog;

INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello');

select * from t_enum;
┌─x─────┐
│ hello │
│ world │
│ hello │
└───────┘
# 查看值
SELECT CAST(x, 'Int8') FROM t_enum;

# array example
SELECT array(1, 2) AS x, toTypeName(x) ;
SELECT [1, 2] AS x, toTypeName(x);

3. Clickhouse 表引擎

引擎名称大小写敏感

引擎名称 引擎特点
TinyLog 测试使用,列文件磁盘存储,不支持索引,无并发
Memory 测试使用,内存存储
MergeTree 最强大,支持索引和分区(分区字段必须为表中字段),TTL 生命周期
ReplacingMergeTree MergeTree 子类,去重
SummingMergeTree MergeTree 子类,针对指定列聚合操作,提供“预聚合”

关于数据分区:任何一个批次写入时会写入零食分区,10-15min后,会合并到已有分区,可以手动合并

optimize table xxxx final;

关于主键:只提供一级索引,不同于MySQL的唯一约束

关于稀疏索引:两个相邻索引之间存在数据的间隔

关于建表order by: 必须参数,并且主键必须是 order by 字段的前缀字段

关于TTL :列的数据失效时间或者表修改失效

关于去重:只会在合并过程中出现,并且只在分区内部进行去重,所以并不能保证全局去重,唯一建:order by的字段

4. Clickhouse SQL

4.1 DML

# 1.insert
insert into table_name1 values(),()……
insert into table_name1 select xxx from table_name2
# 2.delete
alter table table_name1 delete where xxx=xxx;
truncate table table_name1;
# 3.update
alter table table_name1 update xxx=xxx where xxx=xxx;

# 4.query

## 4.1 with rollup : 从右至左去掉维度进行小计
## 4.2 with cube : 从右至左去掉维度进行小计,再从左至右去掉维度进行小计
## 4.3 with totals: 只计算合计

4.2 DDL

# table
alter table table_name1 add column New_col Type after col1;
alter table table_name1 modify column new_col_name Type;
alter table table_name1 drop column col_name;

# export data
clickhouse-client --query "select ……"> /xxx/xxx.csv
## header
clickhouse-client --query "select ……" --format CSVWithNames > /xxx/xxx.csv

# import data
???

5. Clickhouse 副本

保证数据高可用,一台ck宕机,不影响整体使用

副本只能同步数据,不能同步表结构

  1. 启动ZK
  2. 增加配置,同步配置

/etc/clickhouse-server/config.d/metrika.xml 文件名可以随便,后面指定读取


<yandex>
<zookeeper-servers>
<node index="1">
<host>hadoop102host>
<port>2181port>
node>

你可能感兴趣的:(big,data,hadoop,Clickhouse)