ClickHouse集群安装注意事项

因为clickHouse的内部通信地址默认使用的是9000端口,所以需要更改,以免和hdfs的冲突,修改集群文件metrika.xml文件,指定三个端口的端口为9100,分别发送到服务器,然后修改/etc/clickhouse-server/config.xml文件,将其中的port文件改为9100,

这时候clickHouse就可以使用9100作为数据库集群之间tcp通讯的端口,这样就导致clickhouse-client不能使用默认的9000,所以登陆的时候要指定端口号

ClickHouse的场景

为什么要用clickHouse?

1.clickHouse是c开发的,快

2.用到OLAP(联机分析处理)

3.对Hadoop技术栈的补充,专门用来对数据进行分析的,补充spark和hive没有涉及的维度查询

联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它具有FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。其中F是快速性(Fast),指系统能在数秒内对用户的多数分析要求做出反应;A是可分析性(Analysis),指用户无需编程就可以定义新的专门计算,将其作为分析的一部 分,并以用户所希望的方式给出报告;M是多维性(Multi—dimensional),指提供对数据分析的多维视图和分析;I是信息性(Information),指能及时获得信息,并且管理大容量信息。 [1] 

 

clickhouse监控8888 clickhouse 9000_数组

 clickHouse针对的需求

1.快,近乎实时的结果获取

2.面对的数据是整理好的,甚至处理好的,不需要进行大规模修改,而且不需要支持事务,只是查询使用

3.因为是针对各种维度进行分析用的,所以最好使用的是列式存储,(这也导致clickhouse要比mysql更适合做这个工作)

应用场景

1.绝大多数请求都是用于读访问的
2.数据需要以大批次(大于1000行)进行更新,而不是单行更新;或者根本没有更新操作
3.数据只是添加到数据库,没有必要修改
4.读取数据时,会从数据库中提取出大量的行,但只用到一小部分列
5.表很“宽”,即表中包含大量的列
6.查询频率相对较低(通常每台服务器每秒查询数百次或更少)
7.对于简单查询,允许大约50毫秒的延迟
8.列的值是比较小的数值和短字符串(例如,每个URL只有60个字节)
9.在处理单个查询时需要高吞吐量(每台服务器每秒高达数十亿行)
10.不需要事务
11.数据一致性要求较低
12.每次查询中只会查询一个大表。除了一个大表,其余都是小表
13.查询结果显著小于数据源。即数据有过滤或聚合。返回结果不超过单个服务器内存大小

引擎概述

 

 

 

函数示例

show tables;

# 创建表
create table if not exists stu (uid String,age UInt16) ENGINE=TinyLog
insert into 
#查询
select * from stu
# 新增

# 创建枚举

create table t_enum(
x Enum8('hello'=1,'world'=3))engine=TinyLog

select * from t_enum
# 插入枚举
insert into t_enum values ('hello')
# 查看结构
desc t_enum
# 查看枚举对应的值
select cast(x,'Int8') from t_enum
# 创建数组
select array(1,2,3) as x ,toTypeName(x)
# 创建元组
select tuple('a',1) as y ,toTypeName(y)
# 创建日期类型
select toDateTime('2014-01-31 23:23:12') as da,
		toDate(da) as date_local,
		toDate(da,'Asia/Yekaterinburg') as date_beijing,
		toString(da,'US/Samoa') as riben
		
select length('的')
select upper('ajlkdsfjlaksdjf') 
select lower('AJLKDSFJLAKSDJ') 
# 判断是否是utf8的字符
select isValidUTF8('')
# 转换为UTF8
select toValidUTF8('')
# 要重复的次数
select repeat('assss',10)
# 反转
select reverse('abc')

# 数组操作
# 删除最后一项
select arrayPopBack([1,2,3,4]) as res
# 高阶函数
# 支持lambda表达式
# 每个array中的元素+2
select   arrayMap(x->(x*2),[1,2,3]) as tr
# 合并数组
select arrayMap((x,y)->(x+y),[1,2,3],[10,20,30])

# 过滤数组,支持 运算符,以及AND, OR, alias, NOT, token, AS, BETWEEN, LIKE,
# IS, NOT LIKE, IN, NOT IN, GLOBAL IN, GLOBAL NOT IN 等关键字 
select arrayFilter(x->x >10 [2,23,43,5,63,2,4]) AS RES
# 数组元素拆分
# 当v返回的真的时候,将会切分  => [[12,32,43,5],[4,6,3]]  ,在左侧切
select arraySplit((s,v)->v,[12,32,43,5,4,6,3],[0,0,0,0,1,0,0])
# 右侧切  =>[[12,32,43,5,4],[6,3]]  
select arrayReverseSplit((s,v)->v,[12,32,43,5,4,6,3],[0,0,0,0,1,0,0])