大数据Clickhouse(CK)
大數據
- 大數據Clickhouse(CK)
-
- 1. Ubuntu下安裝
-
-
- 1)下載
- 2)安裝
- 3)啟動
- 4)登錄
- 5)測試
-
- 2. python連接clickhouse (CK)
- 3. 數據庫管理工具連接clickhouse
-
- 1)DataGrip連接clickhouse
- 2)DBeaver連接clickhouse
- 4. 實例
大數據Clickhouse(CK)
Clickhouse本為俄羅斯yandex搜索引擎服務。近幾年大火,各大大廠大都在用。Clickhouse在國外簡稱CH,在國內簡稱CK,因叫起來有AK的感覺。
1. Ubuntu下安裝
環境:Ubuntu16.04,其他版本應該也可以(未測)
1)下載
官方下載地址:
https://repo.clickhouse.tech/deb/stable/main/。或 https://repo.yandex.ru/clickhouse/deb/stable/main/。因為clickhouse本屬于俄羅斯yandex搜索引擎。
下載如下三個文件
clickhouse-common-static_20.9.2.20_amd64.deb
clickhouse-server_20.9.2.20_all.deb
clickhouse-client_20.9.2.20_all.deb
2)安裝
執行
sudo dpkg -i clickhouse-common-static_20.9.2.20_amd64.deb
sudo dpkg -i clickhouse-server_20.9.2.20_all.deb
sudo dpkg -i clickhouse-client_20.9.2.20_all.deb
安裝過程中會提示輸入密碼。假設密碼設置為root
3)啟動
sudo service clickhouse-server start
或
systemctl restart clickhouse-server
4)登錄
clickhouse-client --password
輸入安裝時設置的密碼root即可登錄
5)測試
輸入 show databases;
2. python連接clickhouse (CK)
需要下載clickhouse-driver驅動。
(1)在線安裝
pip install clickhouse-driver即可。
(2)離線安裝
先到
https://pypi.org/project/tzlocal/#files 下載 tzlocal-2.1-py2.py3-none-any.whl (16.2 kB)
https://pypi.org/project/clickhouse-driver/#files 下載 clickhouse_driver-0.2.1-cp37-cp37m-manylinux1_x86_64.whl
先安裝插件
pip install tzlocal-2.1-py2.py3-none-any.whl
再安裝clickhouse_driver:
pip install clickhouse_driver-0.2.1-cp37-cp37m-manylinux1_x86_64.whl
實例:
# 注意代碼中是clickhouse_driver,而pip安裝包是clickhouse-driver。因為python代碼習慣用下劃線
from clickhouse_driver import Clientclient = Client(host = '127.0.0.1',port = '9000', # 或 9000user = 'default',password = 'root',database = 'test_db'
)def test():global clientsql = 'show tables' # show databases;res = client.execute(sql)print(res)if __name__ == '__main__':test()
注:ClickHouse提供兩個網絡端口: TCP 默認9000,HTTP 默認8123, 這里clickhouse_driver.Client連接法,我們要用TCP端口9000
python 驅動:clickhouse-driver 使用的是 tcp 端口: 9000
java 驅動:clickhouse-jdbc 使用的是http 端口: 8123
附:除了clickhouse-driver驅動,還有asynch 等驅動也可實現python連接clickhouse,參考https://github.com/long2ice/asynch,
來自官方文檔https://clickhouse.tech/docs/zh/interfaces/third-party/client-libraries/#sidebar-sidebar-10
3. 數據庫管理工具連接clickhouse
navicat等不支持連接clickhouse,如下兩個軟件支持
1)DataGrip連接clickhouse
DataGrip為大名鼎鼎地Jetbrains公司,用過pycharm、idea的對他不陌生,
官方下載鏈接:https://www.jetbrains.com/zh-cn/datagrip/promo/
安裝啟動,如下圖,點擊左上角“+”,再點“Data Source”,再點“ClickHouse”,
彈出框如下圖,輸入如下信息:
輸入IP:如果是本地,則127.0.0.1
端口:默認HTTP端口 8123。注意不再是TCP端口9000
Clickhouse數據庫用戶:默認default
Clickhouse數據庫密碼:默認空,這里我設置了密碼,如root
然后點擊“編輯驅動設置”
點擊Apply,會提示下載驅動,下載后點擊“Test Connection”。成功后點OK。
點如下兩個紅圈的地方,選中All schemas可以顯示所有的庫,這里test_db為我新建的庫,其他為系統自帶。
輸入sql 語句:
點擊如下,選中一個庫,如test_db庫,右鍵 -> new -> Query Console,即可在console框中輸入sql語句。
2)DBeaver連接clickhouse
DataGrip試用期30天,如果沒破解,也可以替換為DBeaver,留作備用,也不錯,但體驗感沒有DataGrip好。
如下:
啟動軟件,點擊左上角加號圖標,依次如下圖點擊操作
輸入IP:如果是本地,則127.0.0.1
端口:默認HTTP端口 8123。注意不再是TCP端口9000
Clickhouse數據庫用戶:默認default
Clickhouse數據庫密碼:默認空,這里我設置了密碼,如root
然后點擊“編輯驅動設置”
點擊庫,點擊下載/更新
下載驅動,這里一定注意要下載0.2.4版本的驅動,因為這個驅動穩定。雙擊圖中紅線位置。
如下,選擇0.2.4版本進行下載。
注:其他版本0.2.6試過,不能用,連接失敗。
4. 實例
用實例(1000w條數據)對比一下CK和mysql的性能
1)創建表
(1)CK
先建立一個MergeTree()引擎的表test_y
CREATE TABLE test_y
(id UInt64,a String,b String,c String
)ENGINE = MergeTree()
ORDER BY id
(2)MySQL
先創建一個空表test_y,
create table `test_y` (`id` int(11) unsigned NOT NULL auto_increment,`a` varchar(255) collate utf8_bin NOT NULL default '',`b` varchar(255) collate utf8_bin NOT NULL default '',`c` varchar(255) collate utf8_bin NOT NULL default '',
) ENGINE = InnoDB auto_increment = 1 default charset = utf8 ROW_FORMAT=COMPACT;
2)插入insert
(1)CK
(i)插入1000w 條數據, ------ 執行時間:10s
INSERT INTO TABLE test_y SELECT number,concat('A',toString(number)),concat('B',toString(number)),concat('C',toString(number)) FROM numbers(1, 10000000) -- numbers(10000000)表從0開始的1000w條,即0~9999999,numbers(1, 10000000) 表從1開始的1000w條,即1~10000000
(ii)插入10億 條數據, ------ 執行時間:0.5h
INSERT INTO TABLE test_y SELECT number,concat('A',toString(number)),concat('B',toString(number)),concat('C',toString(number)) FROM numbers(1, 1000000000)
(2)MySQL
(i)插入1000w條數據, ------ 執行時間:2.5h
寫入1000w條數據數據,思路是創建存儲過程:如proc3(),可將存儲過程看成函數proc3(),設置變量 i 自增,最后調用call proc3;
mysql> delimiter $$ -- 將語句的結束符號從分號;臨時改為兩個$$(可以是自定義)
mysql> create procedure proc3() -- 存儲過程名,類似函數, proc = procedure-> begin-> declare i int; -- 聲明變量 i-> set i = 1;-> while i < 10000001 do-> insert into test_y (id, a, b, c) values(i, concat('A', i), concat('B', i), concat('C', i));-> set i = i + 1;-> end while;-> end;-> $$
mysql> delimiter ; -- 將語句的結束符號恢復為分號
Query OK, 0 rows affected (0.12 sec)mysql> call proc3; -- 調用存儲過程
解析:
默認情況下,存儲過程和默認數據庫相關聯,如果想指定存儲過程創建在某個特定的數據庫下,那么在過程名前面加數據庫名做前綴。 在定義過程時,使用DELIMITER $$ 命令將語句的結束符號從分號 ; 臨時改為兩個 $$,使得過程體中使用的分號被直接傳遞到服務器,而不會被客戶端(如mysql)解釋。
(ii)插入10億條數據, ------ 執行時間:未測試
3) 查詢SELECT
(1)CK
(i)查詢1000w 條數據, ------ 執行時間:1s
SELECT * FROM test_y WHERE b = 'B555555'
(i)查詢10億 條數據, ------ 執行時間:2.5min
SELECT * FROM test_billion WHERE b = 'B555555'
(2)MySQL
(i)查詢1000w 條數據, ------ 執行時間:44s
SELECT * FROM test_y WHERE b = 'B555555'
(i)查詢10億 條數據, ------ 執行時間:未測試
注:mysql把要查詢的那字段,加上索引也會飛快!
總結
以上是生活随笔為你收集整理的大数据Clickhouse(CK)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bmf mysql_bmf 的动态 -
- 下一篇: 2015年6月9日_诗词学习