ClickHouse 特性 | 一文讀懂 ClickHouse V22.8 新版本重要特性

1.背景介紹
各位 ClickHouse 圈友們!ClickHouse 又雙叒叕發(fā)布新版本了。
大家都知道ClickHouse的發(fā)版節(jié)奏非???,從官網(wǎng)發(fā)布記錄來看,2022年依舊保持了一個(gè)月一個(gè)大版本的節(jié)奏,詳情可以參閱ClickHouse 2022 Changelog(https://clickhouse.com/docs/en/whats-new/changelog/)。除了主版本之外,小版本就更多了,可見 ClickHouse 社區(qū)非常的活躍,內(nèi)核迭代效率非常高。在此也呼吁國內(nèi)的開發(fā)者小伙伴們多多參與到 ClickHouse 社區(qū)建設(shè)活動(dòng)中。
今天給大家重點(diǎn)介紹 ClickHouse 社區(qū)最新版本的 LTS 版本 - V22.8 LTS 。LTS 全稱是Long Term Support 長(zhǎng)期支持版。LTS 版本是社區(qū)官方推薦的內(nèi)核功能穩(wěn)定,可以用于生產(chǎn)環(huán)境,且會(huì)長(zhǎng)期進(jìn)行穩(wěn)維護(hù)升級(jí)的版本系列,也是被社區(qū)用戶最廣泛使用的版本,阿里云也于近期正式提供了全托管的企業(yè)級(jí) ClickHouse V22.8 版本,大家可以到阿里云官網(wǎng)搜索體驗(yàn)。
閑言少敘,咱們一起來揭開 V22.8 版本的面紗,看看有哪些值得關(guān)注的重要特性發(fā)布。
2.特性介紹
日期&時(shí)間類型擴(kuò)展
日期類型精度轉(zhuǎn)化為可設(shè)置精度參數(shù),最大為 8 位,也就是達(dá)到微秒級(jí)精度,可覆蓋所有日期支持范圍內(nèi)的時(shí)間值。假如設(shè)置了 9 位的時(shí)間精度參數(shù),則精度進(jìn)一步增加,但是需要注意最大時(shí)間范圍僅僅支持到 2262-04-11 23:47:16 UTC。
輕量 Delete 及語法支持
V22.8 LTS 對(duì)于 MergeTree 引擎表,支持標(biāo)準(zhǔn)的 DELETE FROM SQL 語法,同時(shí)實(shí)現(xiàn)了“輕量” Delete 邏輯 。在之前的版本中,ClickHouse 的 DELETE 操作是 Mutation 類操作,所有的 DELETE 事件是通過單獨(dú)文件進(jìn)行記錄存儲(chǔ),然后基于內(nèi)核調(diào)度不定時(shí)的異步執(zhí)行完成;執(zhí)行過程也比較重,需要定位到相應(yīng)的記錄位置,進(jìn)行物理刪除。新版本中 Delete 基于 ClickHouse 的列更新機(jī)制,在數(shù)據(jù)分區(qū)中增加了系統(tǒng)虛擬列“_row_exists ”,通過 update_row_exists=0 where predicate 來標(biāo)記列處于“已刪除狀態(tài)”,實(shí)現(xiàn)更加輕量,因此性能提升明顯。語法差異如下:
ALTER TABLE [db.]table [ON CLUSTER cluster] DELETE WHERE filter_expr新版本 Delete 語法
DELETE FROM [db.]table [WHERE expr]舉例如下:
DELETE FROM hits WHERE Title LIKE '%hello%' ;但是需要注意的是,雖然有了標(biāo)準(zhǔn) Delete From SQL 語法的支持以及輕量實(shí)現(xiàn),但當(dāng)前的 Delete 實(shí)現(xiàn)默認(rèn)仍然是異步執(zhí)行。所以 Delete 操作的結(jié)果并不是實(shí)時(shí)反饋在查詢結(jié)果上的,并不能等同于在線處理類數(shù)據(jù)庫的實(shí)時(shí)刪除效果,也不能將 ClikHouse 應(yīng)用于 TP 類型的在線業(yè)務(wù)類場(chǎng)景。官網(wǎng)強(qiáng)調(diào) “this new feature does not make ClickHouse an HTAP DBMS”。
文件數(shù)據(jù)分布式并行寫入
在 ClickHouse 早期的版本里支持了 S3 表函數(shù),用于支持從 S3 進(jìn)行數(shù)據(jù)導(dǎo)入操作,但是數(shù)據(jù)寫入過程是串行的,面向集群中單臺(tái) ClickHouse Server 進(jìn)行寫入,典型場(chǎng)景寫入效率通常是每秒百萬行記錄。
S3數(shù)據(jù)寫入 ClickHouse 使用實(shí)例:
INSERT INTO distributed SELECT * FROM s3Cluster(....)阿里云 ClickHouse 服務(wù)兼容社區(qū)的標(biāo)準(zhǔn)行為,支持 S3 導(dǎo)入的同時(shí),增強(qiáng)擴(kuò)展了對(duì)于阿里云 OSS 的支持,支持 OSS 的表函數(shù)模式,從 OSS 進(jìn)行數(shù)據(jù)的導(dǎo)入。同樣,阿里云 OSS 也支持并行導(dǎo)入 ClickHouse 的模式,語法示例如下。
insert into oss_test_tbl_distributedselect * from oss('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>', '<column-definitions>');
3.其他版本合并特性
除了以上在V22.8版本上首次發(fā)布的能力之外,在上一個(gè) LTS 版本 - V22.3 LTS 版本里發(fā)布的一些重要能力,也演進(jìn)到 V22.8 LTS 版本中,在此一起介紹。
JSON類型和動(dòng)態(tài)子列支持
老版本 String 方式 JSON 讀寫
CREATE TABLE games (data String)ENGINE = MergeTree ORDER BY tuple();SELECT JSONExtractString(data, 'teams', 1, 'name')FROM games;
新版本獨(dú)立 JSON 對(duì)象類型和動(dòng)態(tài)子列
DROP TABLE IF EXISTS github_JSON;SET allow_experimental_object_type=1;CREATE table github_JSON(event JSON) ENGINE = MergeTree ORDER BY tuple(
動(dòng)態(tài)子列的支持,大幅提高了非結(jié)構(gòu)化數(shù)據(jù)的分析效率和擴(kuò)展性支持。
而新版本中由于有了動(dòng)態(tài)子列,開發(fā)者完全不需要關(guān)心 JSON 的嵌套層次和內(nèi)部數(shù)據(jù)類型,只需要在目標(biāo)表中創(chuàng)建 JSON 數(shù)據(jù)類型字段,直接將半結(jié)構(gòu)化的數(shù)據(jù)批量導(dǎo)入到 ClickHouse 目標(biāo)表中即可。同時(shí),即使在業(yè)務(wù)變更 JSON 對(duì)象屬性增加的情況下,也無需要修改目標(biāo)表的結(jié)構(gòu),內(nèi)核會(huì)動(dòng)態(tài)增加子列,并進(jìn)行數(shù)據(jù)存儲(chǔ),擴(kuò)展靈活度大幅提升。
INSERT INTO github_JSON SELECT * FROM OSS('oss-endpoint',JSONAsObject, 'event JSON');
SELECT event.type, event.repo, event.actor FROM github_JSON LIMIT 1;引擎級(jí)遠(yuǎn)程文件緩存
在阿里云 ClickHouse 的云原生版本中,我們已經(jīng)基于對(duì)象存儲(chǔ) OSS 實(shí)現(xiàn)了基于多 shard 共享存儲(chǔ)的存算分離架構(gòu)。通過應(yīng)用引擎的緩存能力,保證了云原生版本的查詢性能。
性能及其他
除了以上的重要的特性發(fā)布之外,V22.8 LTS 保持了社區(qū)一貫的持續(xù)性能優(yōu)化提升,帶來數(shù)十項(xiàng)的性能優(yōu)化。以及其他一些成熟特性如:
Projection 的支持,相比較物化視圖增強(qiáng)了和源表數(shù)據(jù)一致性的保證。同時(shí)基于“空間換效率”的邏輯,創(chuàng)建基于不同排序索引維度的物理表,數(shù)十倍地提高了非排序鍵數(shù)據(jù)的查詢效率。
UDF (UserDefinedFunction) 的支持,支持按照 SQL 模式和腳本執(zhí)行模式的用戶自定義函數(shù),增加了用戶自主進(jìn)行數(shù)據(jù)清洗和處理的能力。
4.總結(jié)








點(diǎn)擊「閱讀原文」查看 云數(shù)據(jù)庫ClickHouse 更多信息

