Linux安装clickhouse

### 一、安装

官网:https://clickhouse.tech/

下载地址:http://repo.red-soft.biz/repos/clickhouse/stable/el7/

https://clickhouse.com/docs/zh/getting-started/install/

1、 vim /etc/selinux/config

修改:SELINUX=disabled

2、 yum install -y libtool

3、在 hadoop102 的/opt/software 下创建 clickhouse 目录

mkdir clickhouse

安装包

4、rpm -ivh *.rpm

5、vim /etc/clickhouse-server/config.xml

把 <listen_host>::</listen_host> 的注释打开

在这个文件中,有 ClickHouse 的一些默认路径配置,比较重要的

数据文件路径:<path>/var/lib/clickhouse/</path>

日志文件路径:<log>/var/log/clickhouse-server/clickhouse-server.log</log>

6、启动

systemctl start clickhouse-server

7、关闭开机自启

systemctl disable clickhouse-server

8、客户端登录

clickhouse-client -m

-m :可以在命令窗口输入多行命令

IDEA 连接clickhouse

 

 

 

 

 

### 二、数据类型

1整数类型:
Int8/Int16/Int32/Int64
分别对应mysql类型tinyint/smallint/int/bigint
取值范围:是-2的(Int后数字-1)的平方到2的(Int后数字的平方-1)-1,Int8对应-128~127
UInt8/UInt16/UInt32/UInt64
前面加U 例如 UInt8 代表全部是正数,
取值范围0到2的Int后面数字次方-1,如UInt8对应0-255
2 浮点类型:
Float32/Float64
分别对应mysql的float与double
Decimal(n,p)对应于mysql decimal(n,p)

a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。
b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0。

但是有简写形式Decimal32(p),Decimal64(p),Decimal128(p),分别对应
Decimal(1~9,p),Decimal(10~18,p)``Decimal(19~38,p)

如:123.1234567

Decimal32(5)保留5位:123.12345 不会四舍五入

https://www.cnblogs.com/zsmynl/p/6927659.html

3 字符串类型
String/FixedString/UUID
String不像mysql一样有大小限制,它可以表示成msyql varchar/text/clob/blob的合集
FixedString(n) 定长字符串,相当于char
4 日期类型
Date yyyy-MM-dd格式
DateTime yyyy-MM-dd HH:mm:ss格式

### 三、表引擎

表引擎是 ClickHouse 的一大特色。可以说, 表引擎决定了如何存储表的数据。包括:

➢ 数据的存储方式和位置,写到哪里以及从哪里读取数据。

➢ 支持哪些查询以及如何支持。

➢ 并发数据访问。

➢ 索引的使用(如果存在)。

➢ 是否可以执行多线程请求。

➢ 数据复制参数。

表引擎的使用方式就是必须显式在创建表时定义该表使用的引擎,以及引擎使用的相关

参数

 

TinyLog:

以列文件的形式保存在磁盘上,不支持索引,没有并发控制。一般保存少量数据的小表,

生产环境上作用有限。可以用于平时练习测试用。

```sql
create table t_tinylog ( id String, name String) engine=TinyLog;
```

Memory:

内存引擎,数据以未压缩的原始形式直接保存在内存当中,服务器重启数据就会消失。

读写操作不会相互阻塞,不支持索引。简单查询下有非常非常高的性能表现(超过 10G/s)。

一般用到它的地方不多,除了用来测试,就是在需要非常高的性能,同时数据量又不太

大(上限大概 1 亿行)的场景。

 

MergeTree:

ClickHouse 中最强大的表引擎当属 MergeTree(合并树)引擎及该系列(*MergeTree)

中的其他引擎,支持索引和分区,地位可以相当于 innodb 之于 Mysql。

```sql
CREATE TABLE insert_select_testtable
(
`a` Int8,
`b` String,
`c` Int8
)
ENGINE = MergeTree()
ORDER BY a

INSERT INTO insert_select_testtable (*) VALUES (1, 'a', 1) ;
```

例子2:

```sql
create table t_order_mt(
id UInt32,
sku_id String,
total_amount Decimal(16,2),
create_time Datetime
) engine =MergeTree
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id,sku_id);

insert into t_order_mt values
(101,'sku_001',1000.00,'2020-06-01 12:00:00') ,
(102,'sku_002',2000.00,'2020-06-01 11:00:00'),
(102,'sku_004',2500.00,'2020-06-01 12:00:00'),
(102,'sku_002',2000.00,'2020-06-01 13:00:00'),
(102,'sku_002',12000.00,'2020-06-01 13:00:00'),
(102,'sku_002',600.00,'2020-06-02 12:00:00');

--orderby必选
rder by 设定了分区内的数据按照哪些字段顺序进行有序保存。
order by 是 MergeTree 中唯一一个必填项,甚至比 primary key 还重要,因为当用户不
设置主键的情况,很多处理会依照 order by 的字段进行处理


--ClickHouse 中的主键,和其他数据库不太一样,它只提供了数据的一级索引,但是却不是唯一约束。这就意味着是可以存在相同 primary key 的数据的

TTL 即 Time To Live,MergeTree 提供了可以管理数据表或者列的生命周期的功能。
下面的这条语句是数据会在 create_time 之后 10 秒丢失
alter table t_order_mt3 MODIFY TTL create_time + INTERVAL 10 SECOND;

create table t_order_mt3(
id UInt32,
sku_id String,
total_amount Decimal(16,2) TTL create_time+interval 10 SECOND,
create_time Datetime
) engine =MergeTree
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id, sku_id);

insert into t_order_mt3 values
(106,'sku_001',1000.00,'2020-06-12 22:52:30'),
(107,'sku_002',2000.00,'2020-06-12 22:52:30'),
(110,'sku_003',600.00,'2020-06-13 12:00:00');

```

 

 

### 四、sql

https://clickhouse.com/docs/en/sql-reference/statements/insert-into/

##### 1、Insert

基本与标准 SQL(MySQL)基本一致

1)标准

insert into [table_name] values(…),(….)

2)从表到表的插入

insert into [table_name] select a,b,c from [table_name_2]

 

##### 2、update和delete

Alter 的一种。

虽然可以实现修改和删除,但是和一般的 OLTP 数据库不一样,**Mutation** **语句是一种很**

**“重”的操作,而且不支持事务。**

“重”的原因主要是每次修改或者删除都会导致放弃目标数据的原有分区,重建新分区。

所以尽量做批量的变更,不要进行频繁小数据的操作。

1)删除操作

alter table t_order_smt delete where sku_id ='sku_001';

2)修改操作

alter table t_order_smt update total_amount=toDecimal32(2000.00,2) where id

=102;

由于操作比较“重”,所以 Mutation 语句分两步执行,同步执行的部分其实只是进行

新增数据新增分区和并把旧分区打上逻辑上的失效标记。直到触发分区合并的时候,才会删

除旧数据释放磁盘空间,一般不会开放这样的功能给用户,由管理员完成。

 

##### 3、查询操作

ClickHouse 基本上与标准 SQL 差别不大

➢ 支持子查询

➢ 支持 CTE(Common Table Expression 公用表表达式 with 子句)

➢ 支持各种 JOIN,

但是 JOIN 操作无法使用缓存,所以即使是两次相同的 JOIN 语句,

ClickHouse 也会视为两条新 SQL

➢ 窗口函数

➢ 不支持自定义函数

➢ GROUP BY 操作增加了 with rollup\with cube\with total 用来计算小计和总计。

1)插入数据

hadoop102 :) alter table t_order_mt delete where 1=1;

insert into t_order_mt values

(101,'sku_001',1000.00,'2020-06-01 12:00:00'),

(101,'sku_002',2000.00,'2020-06-01 12:00:00'),

(103,'sku_004',2500.00,'2020-06-01 12:00:00'),

(104,'sku_002',2000.00,'2020-06-01 12:00:00'),

(105,'sku_003',600.00,'2020-06-02 12:00:00'),

(106,'sku_001',1000.00,'2020-06-04 12:00:00'),

(107,'sku_002',2000.00,'2020-06-04 12:00:00'),

(108,'sku_004',2500.00,'2020-06-04 12:00:00'),

(109,'sku_002',2000.00,'2020-06-04 12:00:00'),

(110,'sku_003',600.00,'2020-06-01 12:00:00');

2)with rollup:从右至左去掉维度进行小计

hadoop102 :) select id , sku_id,sum(total_amount) from t_order_mt group by

id,sku_id with rollup;

3)with cube : 从右至左去掉维度进行小计,再从左至右去掉维度进行小计

hadoop102 :) select id , sku_id,sum(total_amount) from t_order_mt group by

id,sku_id with cube;

4)with totals: 只计算合计

hadoop102 :) select id , sku_id,sum(total_amount) from t_order_mt group by

id,sku_id with totals;

 

```sql

WITH
(
SELECT sum(bytes)
FROM system.parts
WHERE active
) AS total_disk_usage
SELECT
(sum(bytes) / total_disk_usage) * 100 AS table_disk_usage,
table
FROM system.parts
GROUP BY table
ORDER BY table_disk_usage DESC
LIMIT 10

┌──────table_disk_usage─┬─table──────┐
│ 66.13563015490257 │ hits_v1 │
│ 29.31875240635302 │ visits_v1 │
│ 5.843957690326289 │ t_dict │
│ 0.3967229532123266 │ metric_log │
│ 0.0012069656728751568 │ trace_log │
│ 0.000137742753168703 │ part_log │
└───────────────────────┴────────────┘

--https://www.saoniuhuo.com/article/detail-82.html
--https://www.codeleading.com/article/12084056248/


WITH (
SELECT avg(total_amount) AS avga
FROM t_order_mt
) AS avga
SELECT *
FROM t_order_mt
WHERE total_amount > toDecimal64(avga, 2)
```

 

 

##### 4、alter

同 MySQL 的修改字段基本一致

1)新增字段

alter table **tableName** add column **newcolname** String after col1;

2)修改字段类型

alter table tableName modify column newcolname String;

3)删除字段

alter table tableName drop column newcolname;

##### 5、导出数据

clickhouse-client --query "select * from t_order_mt where

create_time='2020-06-01 12:00:00'" --format CSVWithNames>

/opt/module/data/rs1.csv

 

 

hive with

```sql
--1
with cte_order as
(
select store_id,channel,paid_date,order_id,gmv
from testdb.order_line
where channel in ('SNG','JDDJ')
)
--with as 语句不能加分号 ;

select store_id,order_id,paid_date,order_id,gmv
from cte_order
where channel='SNG'
union all
select store_id,order_id,paid_date,order_id,gmv
from cte_order
where channel='JDDJ'
;


```

 

 

表引擎:

sql: 数据类型、查询语句 、分组聚合、join、函数。

### 五、jdbc

 

posted @   御本美琴初号机  阅读(1162)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示