ClickHouse入门

1 什么是ClickHouse

​ ClickHouse 是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),他的优势就是快,每秒处理的数据量特别大,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。

​ 与Hadoop、Spark这些巨无霸组件相比,ClickHouse很轻量级,其特点:列式存储数据库,数据压缩;关系型、支持SQL;分布式并行计算,把单机性能压榨到极限;高可用;数据量级在PB级别。

适用场景:日志数据的行为分析,标签画像的分析,数据集市层分析等。

2 ClickHouse安装

​ 下载地址:https://packagecloud.io/altinity/clickhouse

​ (1)安装前准备:

​ ①取消CentOS取消打开文件数限制:在/etc/security/limits.conf、/etc/security/limits.d/90-nproc.conf这2个文件的末尾加入一下

* soft nofile 65536 
* hard nofile 65536 
* soft nproc 131072 
* hard nproc 131072

​ ②CentOS取消SELINUX:修改/etc/selinux/config中的SELINUX=disabled后重启

SELINUX=disabled

​ ③关闭防火墙

​ (2)下载四个安装包

wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/6/clickhouse-server-common-1.1.54362-1.el6.x86_64.rpm/download.rpm
wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/6/clickhouse-server-1.1.54362-1.el6.x86_64.rpm/download.rpm
wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/6/clickhouse-debuginfo-1.1.54362-1.el6.x86_64.rpm/download.rpm
wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/6/clickhouse-client-1.1.54362-1.el6.x86_64.rpm/download.rpm

​ (3)安装server-common

sudo rpm -ivh clickhouse-server-common-1.1.54362-1.el6.x86_64.rpm

​ (2)安装server

sudo rpm -ivh clickhouse-server-1.1.54362-1.el6.x86_64.rpm

​ 如果遇到下面依赖问题安装依赖包

error: Failed dependencies:
	libicudata.so.42()(64bit) is needed by clickhouse-common-static-19.7.3.9-1.el6.x86_64
	libicui18n.so.42()(64bit) is needed by clickhouse-common-static-19.7.3.9-1.el6.x86_64
	libicuuc.so.42()(64bit) is needed by clickhouse-common-static-19.7.3.9-1.el6.x86_64
---------------------------------------------------------------------------

yum install libicu.x86_64
yum install -y unixODBC libicudata

​ (3)安装debug

sudo rpm -ivh clickhouse-debuginfo-1.1.54362-1.el6.x86_64.rpm

​ (4)安装client

sudo rpm -ivh clickhouse-client-1.1.54362-1.el6.x86_64.rpm

​ (5)验证:因为安装好后会直接写如环境变量,所以直接clousehouse看有没有提示就行

​ (6)启动

前台启动:clickhouse-server --config-file=/etc/clickhouse-server/config.xml
后台启动:nohup clickhouse-server --config-file=/etc/clickhouse-server/config.xml  >null 2>&1 &

​ (7)client连接server

# clickhouse-client 

ClickHouse client version 1.1.54236.
Connecting to localhost:9000.
Connected to ClickHouse server version 1.1.54236.

bigdata01 :)

​ 客户端连接常用参数

参数 说明
–host, -h 服务端的 host 名称, 默认是 ‘localhost’
–port 连接的端口,默认值: 9000。
–user, -u 用户名。 默认值: default。
–password 密码。 默认值: 空字符串。
–query, -q 非交互模式下的查询语句.
–database, -d 默认当前操作的数据库。 默认值: default
–multiline, -m 允许多行语句查询
–format, -f 使用指定的默认格式输出结果。
–time, -t 非交互模式下会打印查询执行的时间到窗口。
–stacktrace 如果出现异常,会打印堆栈跟踪信息。
–config-file 配置文件的名称。

​ (8)关闭ClickServer

service clickhouse-server stop

3 分布式集群及配置文件

​ 按上面步骤在4个节点安装ClickHouse,然后修改配置文件

​ 我是使用“Core Data & Core AI 流分析平台 JDP” 网址:http://www.fusionlab.cn/

​ 配置文件说明: ClickHouse的配置文件是config.xml,默认在/etc/clickhouse-server/目录中

​ (1)config.xml



	
	
		10  --  ClickHouse存储的已归档日志文件的数量
		1000M  -- 文件的大小。适用于loganderrorlog,文件达到大小后,ClickHouse将对其进行存档并重命名,并在其位置创建一个新的日志文件
		/var/log/clickhouse-server/error.log  -- 错误日志文件
		/var/log/clickhouse-server/server.log  --日志文件,根据级别包含所有条目
		trace  --日志记录级别。可接受的值: trace, debug, information, warning, error
	
	
	
	
	::
	
	
	9000
	
	
		/clickhouse/task_queue/ddl
	
	
	
	8123
	
	
	users.xml
	
	
	
	
	
	/data/clickhouse/tmp/
	
	
	8589934592
	
	
	/etc/clickhouse-server/config/metrika.xml
	
	
	1
	
	
	16
	
	
	/data/clickhouse
	
	
	10737418240
	
	
	default
	
	
	3
	
	
	default
	
	
	9009

​ (2)metrika.xml



	
	
		01---layer:双级分片设置,单集群所以这个值对我们没有影响全部一样即可
		ambari01-01-1---replica是副本标识,这里使用了cluster{layer}-{shard}-{replica}的表示方式,ambari01-01-1表示ambari01集群的01分片下的1号副本
		01---shard:分片编号
	
	
	
	
		
			ambari01
			2181
		
		
			ambari02
			2181
		
		
			ambari03
			2181
		
	
	
	
	
		
			10000000000--数据部分的最小大小
			0.01 --数据部分大小与表大小的比率
			lz4---压缩算法,zstd和lz4
		
	
	
	
	
		
		
			
			
				
				true
				
				
					ambari01
					admin
					admin
					9000
				
				
                                
                                        ambari02
                                        admin
                                        admin
                                        9000
                                
			
			
			
				true
				
				
					ambari03
					admin
					admin
					9000
				
				
                                
                                        ambari04
                                        admin
                                        admin
                                        9000
                                
			
		
	
	
	
	
		::/0
	

​ (3)users.xml




	
	
		
		
		
			random
			10000000000
			0
		
		
		
		
			random
			10000000000
			1
			0
		
	
	
	
	
		
			
				3600
				0
				0
				0
				0
				0
			
		
	
	
	
	
		
			
				::/0
			
			8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
			default
			default
		
		
			
				::/0
			
			8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
			readonly
			default
		
	

生成密码
PASSWORD=$(base64 < /dev/urandom | head -c8);
echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'

4 数据类型

​ 官方文档:https://clickhouse.yandex/docs/zh/data_types/

​ 下面介绍几种常见的数据类型

4.1 整型

​ 固定长度的整型,包括有符号整型或无符号整型。

​ (1)整型 范围(-2n-1~2n-1-1):

Int8 [-128 : 127]
Int16 [-32768 : 32767]
Int32 [-2147483648 : 2147483647]
Int64 [-9223372036854775808 : 9223372036854775807]

​ (2)无符号整型范围(0~2n-1):

UInt8 [0 : 255]
UInt16 [0 : 65535]
UInt32 [0 : 4294967295]
UInt64 [0 : 18446744073709551615]

4.2 浮点型

​ Float32 》 float ;Float64》double

​ 建议尽可能以整数形式存储数据,浮点型进行计算时可能引起四舍五入的误差。

​ 特殊的浮点型

​ (1)Inf-正无穷

:) select 1-0.9
┌───────minus(1, 0.9)─┐
│ 0.09999999999999998 │
└─────────────────────┘

​ (2)-Inf-负无穷

:) select -1/0
┌─divide(1, 0)─┐
│          -inf │
└──────────────┘

​ (3)NaN-非数字

:) select 0/0
┌─divide(0, 0)─┐
│          nan │
└──────────────┘

4.3 字符串

​ String:字符串可以任意长度的。它可以包含任意的字节集,包含空字节。

​ FixedString(N):固定长度 N 的字符串,N 必须是严格的正自然数。当服务端读取长度小于 N 的字符串时候,通过在字符串末尾添加空字节来达到 N 字节长度。 当服务端读取长度大于 N 的字符串时候,将返回错误消息。

4.4 数组

​ Array(T):由 T 类型元素组成的数组。T 可以是任意类型,包含数组类型。 但不推荐使用多维数组,ClickHouse 对多维数组的支持有限。如不能在 MergeTree 表中存储多维数组。

​ 创建方式:①使用array函数来创建数组array(T)②可以使用方括号[]

4.5 元组

​ Tuple(T1, T2, …):元组,其中每个元素都有单独的类型

​ 创建方式:使用tuple函数tuple(T1, T2, …)

4.6 Date

​ 日期类型,用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值

4.7 枚举

​ 包括 Enum8 和 Enum16 类型。Enum 保存 ‘string’= integer 的对应关系。Enum8 用 ‘String’= Int8 对描述。Enum16 用 ‘String’= Int16 对描述。

​ 使用案例:创建一个带有一个枚举 Enum8(‘hello’ = 1, ‘hi’ = 2) 类型的列:

CREATE TABLE t_enum(
    x Enum8('hello' = 1, 'hi' = 2)
)ENGINE = TinyLog

​ 这个 x 列只能存储类型定义中列出的值:‘hello’或’hi’。如果尝试保存任何其他值则报错

:) INSERT INTO t_enum VALUES ('hello'), ('hi')

INSERT INTO t_enum VALUES

Ok.




:) insert into t_enum values('a')

INSERT INTO t_enum VALUES

Exception on client:
Code: 49. DB::Exception: Unknown element 'a' for type Enum8('hello' = 1, 'hi' = 2)

​ 从表中查询数据时,ClickHouse 从 Enum 中输出字符串值,如果需要看到对应行的数值,则必须将 Enum 值转换为整数类型

SELECT CAST(x, 'Int8') FROM t_enum

┌─CAST(x, 'Int8')─┐
│               1 │
│               2 │
└─────────────────┘

5 SQL语法

5.1 CREATE

​ (1) CREATE DATABASE:用于创建指定名称的数据库,语法如下:

CREATE DATABASE [IF NOT EXISTS] db_name

​ 如果查询中存在IF NOT EXISTS,则当数据库已经存在时,该查询不会返回任何错误。

​ (2)CREATE TABLE:对于创建表,语法如下:

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
DEFAULT expr – 默认值,用法与SQL类似。
MATERIALIZED expr – 物化表达式,被该表达式指定的列不能被INSERT,因为它总是被计算出来的。 对于INSERT而言,不需要考虑这些列。 另外,在SELECT查询中如果包含星号,此列不会被查询。
ALIAS expr – 别名。

​ 有三种方式创建表:

​ ①直接创建: create table t1(id UInt16,name String) engine=TinyLog

​ ②创建一个与其他表具有相同结构的表:CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]

​ 可以对其指定不同的表引擎声明。如果没有表引擎声明,则创建的表将与db2.name2使用相同的表引擎。

​ ③使用指定的引擎创建一个与SELECT子句的结果具有相同结构的表,并使用SELECT子句的结果填充它。CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT …

5.2 INSERT INTO

​ 主要用于向表中添加数据,基本格式如下:

INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...

​ ClickHouse不支持的修改数据的查询:UPDATE, DELETE, REPLACE, MERGE, UPSERT, INSERT UPDATE。

5.3 ALTER

​ ALTER只支持MergeTree系列,Merge和Distributed引擎的表,基本语法:

ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...

​ 参数说明:ADD COLUMN – 向表中添加新列;DROP COLUMN – 在表中删除列;MODIFY COLUMN – 更改列的类型

5.4 DESCRIBE TABLE

​ 查看表结构:desc mt_table

5.5 CHECK TABLE

​ 检查表中的数据是否损坏,他会返回两种结果:0 – 数据已损坏1 – 数据完整

​ 该命令只支持Log,TinyLog和StripeLog引擎。

你可能感兴趣的:(ClickHouse)