clickhouse之安裝與基本使用


  近期要做一個數據統計功能,公司選擇了clickhouse作為數據庫;下面記錄一下該數據庫的特性和使用教程。

clickhouse是一個列式數據庫,主要用於數據分析;
從目前使用看來,特點如下:

    1. 列式存儲查詢效率高
    2. 不支持事務;
    3. 適用於一寫多讀
    4. 支持特殊的修改和刪除語句,sql標准的刪改語句不支持

 

安裝:

離線安裝

wget https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-client-20.11.3.3-2.noarch.rpm
wget https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-common-static-20.11.3.3-2.x86_64.rpm
wget https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-common-static-dbg-20.11.3.3-2.x86_64.rpm
wget https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-server-20.11.3.3-2.noarch.rpm

yum install -y clickhouse-*

yum源在線安裝

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

sudo yum install clickhouse-server clickhouse-client

 

 

配置:

ClickHouse中的配置項很多,默認會在/etc下生成clickhouse-serverclickhouse-client兩個目錄,由於我們安裝服務我們去修改clickhouse-server下的配置文件

  • 修改/etc/clickhouse-server/config.xml

我們一般修改以下配置項:

  • logger 修改日志的存放路徑
  • http_port 修改瀏覽器訪問的端口,默認為8123
  • tcp_port 修改tcp協議的傳輸端口
  • openSSL 一些ssl的認證配置文件,我們暫時不做ssl認證,此處不做處理
  • listen_host 如果我們要對外使用服務的話,
  • remote_servers 此處是集群相關的配置信息后續會詳解

其他自定義的配置可自行修改,修改配置后我們便可以啟動一個本地的ClickHouse服務

 

  • 創建相關目錄及權限
mkdir -p /data2/clickhouse

chown -R clickhouse:clickhouse /data2/clickhouse

 

啟動服務:

sudo -u clickhouse clickhouse-server --daemon --pid-file=/var/run/clickhouse-server/clickhouse-server.pid --config-file=/etc/clickhouse-server/config.xml

--daemon 標志我們要后台啟動服務
--pid-file 指定服務啟動后的進行文件路徑
--config-file 指定服務啟動的配置文件

 

調試命令:

sudo -u clickhouse clickhouse-server start

 

測試clickhouse服務:

ClickHouse安裝完成后會生成clickhouse-server和clickhouse-client兩個目錄,這個時候我們使用clickhouse-client去測試服務

clickhouse-client -h 127.0.0.1 --port 9000 --multiquery --query="show databases"

注意:--port指定的是tcp的端口

 

配置外網訪問:

修改配置文件

<listen_host>::</listen_host> 取消注釋
 
注意一定要配成 :: 而且要將其他本地監視連接注釋,0.0.0.0將導致本地的命令行客戶端無法連接,本地命令行客戶端使用的是ipv6地址
vim users.xml
 
<networks>
    <ip>::/0</ip>
</networks>

 

 

常用基本操作:

1.創建數據庫

語法:CREATE DATABASE [IF NOT EXISTS] db_name

如果數據庫db_name已經存在,則不會創建新的db_name數據庫。

2.創建表

1)     直接創建
語法:CREATE TABLE t1(id UInt16,name String) ENGINE=TinyLog

例如:create table t1(id UInt8,name String,address String)engine=MergeTree order by id


2)創建一個與其他表具有相同結構的表
語法:CREATE TABLE [IF NOT EXISTS] [db.]table_name AS[db2.]name2 [ENGINE = engine]

例如:create table t2 as t1 engine=MergeTree order by id

可以對其指定不同的表引擎聲明。如果沒有表引擎聲明,則創建的表將與db2.name2使用相同的表引擎。

3)使用指定的引擎創建一個與SELECT子句的結果具有相同結構的表,並使用SELECT子句的結果填充它
語法:CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...

例如:create table t3engine=TinyLog as select * from t1

3.插入數據

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

例如:insert into t1 (id,name,address) values(1,'aa','addr1'),(2,'bb','addr2')

也可以使用SELECT結果插入數據,語法:INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...

例如:insert into t2 select *from t1



4.添加表的列

語法:ALTER TABLE [db].name [ONCLUSTER cluster] ADD COLUMN ...

例如:alter table t1 add column age Int8增加age列類型為Int8

5.修改表的列

語法:ALTER TABLE [db].name [ON CLUSTER cluster] MODIFY COLUMN ...

例如:alter table t1 modify

column age String修改age列類型為String

6.刪除表的列

語法:ALTER TABLE [db].name [ON CLUSTER cluster] DROP COLUMN ...

例如:alter table t1 drop column age刪除age列

7.打印數據庫和數據表

打印數據庫列表語法:SHOUW DATABASES

打印表列表語法:SHOW TABLES

8.查看表結構

語法:DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format]

例如:desc t1

9.刪除表

語法:DROP [TEMPORARY] TABLE [IF

EXISTS] [db.]name [ON CLUSTER cluster]

例如:drop table t2

 

 

示例:

create table if not exists test.tb_test
(
    id Int64,
    datetime DateTime,
    content Nullable(String),
    value Nullable(Float64),
    date Date
)
engine = MergeTree                  --使用mergeTree引擎,ch主要引擎
partition by toYYYYMM(datetime)     --按照datetime這個字段的月進行分區
order by id                         --按照id進行排序
TTL datetime + INTERVAL 3 DAY ;     --三天過期

--修改表中數據過期時間,到期后數據會在merge時被刪除
ALTER TABLE test.tb_test
MODIFY TTL datetime + INTERVAL 1 DAY;


--查詢
select * from tb_test order by id;

--刪除分區,可用於定時任務刪除舊數據
alter table tb_test drop partition '202005';

--插入數據
insert into tb_test values (5, '2020-02-29 12:38:37', 'abcde', 12.553, '2020-04-25');

--修改數據,不推薦使用
alter table tb_test update content = 'hello click' where id=52;

--刪除數據,不推薦使用
alter table tb_test delete WHERE id=56;

 

求和引擎SummingMergeTree
這種引擎可以自動聚合非主鍵數字列,可以用於事件統計

--自動求和聚合表
CREATE TABLE IF NOT EXISTS tb_stat
(
    regionId String,    --門店id
    groupId String,     --統計組id
    in int,             --進客流
    out int,            --出客流
    statDate DateTime   --統計時間
)
ENGINE = SummingMergeTree
partition by (toYYYYMM(statDate), regionId)
ORDER BY (toStartOfHour(statDate), regionId, groupId);

insert into tb_stat values ('1232364', '111',  32, 2,  '2020-03-25 12:56:00');
insert into tb_stat values ('1232364', '111',  34, 44, '2020-03-25 12:21:00');
insert into tb_stat values ('1232364', '111',  54, 12, '2020-03-25 12:20:00');
insert into tb_stat values ('1232364', '222',  45, 11, '2020-03-25 12:13:00');
insert into tb_stat values ('1232364', '222',  32, 33, '2020-03-25 12:44:00');
insert into tb_stat values ('1232364', '222',  12, 23, '2020-03-25 12:22:00');
insert into tb_stat values ('1232364', '333',  54, 54, '2020-03-25 12:11:00');
insert into tb_stat values ('1232364', '333',  22, 74, '2020-03-25 12:55:00');
insert into tb_stat values ('1232364', '333',  12, 15, '2020-03-25 12:34:00');


select toStartOfHour(statDate), regionId, groupId, sum(in), sum(out)
from tb_stat group by toStartOfHour(statDate), regionId, groupId;

數據插入后,大概過1分鍾,在此查詢該表可以發現,只剩下3調數據:

select * from tb_stat;

1232364 111 480 232 2020-03-25 04:56:00
1232364 222 356 268 2020-03-25 04:13:00
1232364 333 352 572 2020-03-25 04:11:00

 

 

 

常見問題:

  1. 啟動clickhouse-server報錯:

ClickHouse 啟動報錯Init script is already running,clickhouse-client報錯Code: 210. DB::NetException: Connection refused (localhost:9000)

  原因:我是使用的service 的方式進行的啟動,/etc/init.d/clickhouse-server start 結果就是報這個錯誤, 因為Redhat7之后需要使用systemctl進行啟動

  解決:

systemctl start clickhouse-server

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM