<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 5345字,需瀏覽 11分鐘

           ·

          2022-12-17 18:52

          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ò)展

          擴(kuò)展 Date32 和 DateTime64 類型,將日期支持范圍從之前版本的 1925年-2283年,擴(kuò)展到支持 1900年-2299 年。需要注意的是,此特性變更不兼容之前的版本,尤其是對(duì)于超出日期邊界值的轉(zhuǎn)化邏輯。在之前的版本中1899-01-01會(huì)被強(qiáng)制轉(zhuǎn)換為1925-01-01,而新的版本中則會(huì)轉(zhuǎn)換為 1900-01-01。

          日期類型精度轉(zhuǎn)化為可設(shè)置精度參數(shù),最大為 8 位,也就是達(dá)到微秒級(jí)精度,可覆蓋所有日期支持范圍內(nèi)的時(shí)間值。假如設(shè)置了 9 位的時(shí)間精度參數(shù),則精度進(jìn)一步增加,但是需要注意最大時(shí)間范圍僅僅支持到 2262-04-11 23:47:16 UTC。

          對(duì)日期類型的擴(kuò)展,將增加對(duì)實(shí)際業(yè)務(wù)的支持力度,尤其是對(duì)于有實(shí)際日期時(shí)間類型依賴的業(yè)務(wù),例如會(huì)員生日的存儲(chǔ)分析支持。

          輕量 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)更加輕量,因此性能提升明顯。語法差異如下:

          舊版本 Delete 語法
          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%' ;
          所以輕量的 DELETE 也可以說是社區(qū)用戶廣泛期待的能力,從開發(fā)者的角度來看,標(biāo)準(zhǔn) SQL 語法的支持,相比較之前的 Mutation 類操作方式,增強(qiáng)了開發(fā)的便利性。從官方的測(cè)試性能結(jié)果來看,在單表1億記錄總量,110個(gè)part規(guī)模下,輕量 Delete 的性能較之前版本提升了近40倍左右,性能提升明顯。

          但是需要注意的是,雖然有了標(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)景寫入效率通常是每秒百萬行記錄。

          V22.8 版本中新增支持 S3 數(shù)據(jù)的分布式并行寫入模式。當(dāng)ClickHouse目標(biāo)表是多副本 Replicated 或者是 Distributed 分布式表時(shí),寫入過程將跨集群多 Server 并行寫入,寫入效率提升 100 倍左右,可以達(dá)到十億行記錄每秒,理論性能提升近 1000 倍。

          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_distributed select * 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 讀寫

          在之前的版本中,ClickHouse支持以String類型來存儲(chǔ)JSON對(duì)象,因?yàn)镴SON對(duì)象是文本格式,需要通過特殊的String解析函數(shù)來解析復(fù)雜的JSON 結(jié)構(gòu),從而獲得 JSON 對(duì)象內(nèi)部字段信息。這種 String 類型存儲(chǔ)方式,內(nèi)部多個(gè)字段混合存儲(chǔ),針對(duì)內(nèi)部特定屬性的查詢會(huì)帶有額外的字段掃描消耗,因此查詢效率非常低。同時(shí)使用起來也比較麻煩,如果 JSON 數(shù)據(jù)存在多層嵌套,那么查詢 JSON 數(shù)據(jù)就需要一層層去進(jìn)行解析和類型轉(zhuǎn)換,才能被業(yè)務(wù)使用。示例如下:
          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)子列

          新版本中推出了獨(dú)立 JSON 對(duì)象類型,DDL 操作時(shí) JSON 對(duì)象只需要指定 JSON 類型即可。同時(shí)引擎針對(duì)每個(gè)寫入的 JSON 對(duì)象值進(jìn)行動(dòng)態(tài)的類型匹配,每個(gè) JSON 屬性按照獨(dú)立列進(jìn)行存儲(chǔ),當(dāng)新寫入的 JSON 對(duì)象值和之前的類型不匹配時(shí),引擎會(huì)動(dòng)態(tài)修改列類型來兼容所有的數(shù)據(jù)類型,對(duì)于新增 JSON 屬性也會(huì)動(dòng)態(tài)增加新的列進(jìn)行數(shù)據(jù)的存儲(chǔ)。
          DROP TABLE IF EXISTS github_JSON;
          SET allow_experimental_object_type=1;
          CREATE table github_JSON(event JSONENGINE = MergeTree ORDER BY tuple(

          動(dòng)態(tài)子列的支持,大幅提高了非結(jié)構(gòu)化數(shù)據(jù)的分析效率和擴(kuò)展性支持。

          對(duì)于常見的從對(duì)象存儲(chǔ)如 OSS 導(dǎo)入數(shù)據(jù)到 ClickHouse 的場(chǎng)景,在前序版本中如果要實(shí)現(xiàn) JSON 對(duì)象子列的獨(dú)立存儲(chǔ)和高效分析,那么就必須預(yù)先在 ClickHouse 端建立結(jié)構(gòu)化的目標(biāo)表,目標(biāo)表的各個(gè)字段需要進(jìn)行明確的類型定義,才能將半結(jié)構(gòu)化的 JSON 數(shù)據(jù)寫入到 ClickHouse 中。同時(shí)如果 JSON 對(duì)象結(jié)構(gòu)變更,那么需要同時(shí)修改目標(biāo)表的表結(jié)構(gòu),才能適配寫入。

          而新版本中由于有了動(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');
          當(dāng)進(jìn)行數(shù)據(jù)讀取時(shí),不需要按照 String 進(jìn)行字符串的解析和類型的轉(zhuǎn)換,直接基于 JSON 對(duì)象進(jìn)行屬性的嵌套讀取就可以。由于有了實(shí)際獨(dú)立的動(dòng)態(tài)子列的存儲(chǔ)的支持,大大提升了 JSON 類型數(shù)據(jù)的存儲(chǔ)和查詢效率。從社區(qū)官方的披露測(cè)試結(jié)果來看,基于 JSON 對(duì)象存儲(chǔ)的查詢性能對(duì)比老版本 String  類型存儲(chǔ)格式下,整體查詢效率提升了近 40 倍左右。
          SELECT event.type, event.repo, event.actor FROM github_JSON LIMIT 1;
          JSON 對(duì)象和動(dòng)態(tài)子列的支持,是筆者認(rèn)為近期 ClickHouse 社區(qū)發(fā)布的最具業(yè)務(wù)價(jià)值的特性之一。尤其在當(dāng)前非常火熱的業(yè)務(wù)日志分析,自動(dòng)駕駛,工業(yè)物聯(lián)網(wǎng)等行業(yè),非常多的基于 Metric 寫入分析的場(chǎng)景,Metric 采集規(guī)模非常大,數(shù)據(jù)結(jié)構(gòu)和字段變化大,想要靈活的進(jìn)行結(jié)構(gòu)調(diào)整,支持任意維度的數(shù)據(jù)分析,借助于 ClickHouse JSON 類型和動(dòng)態(tài)子列就可以很好的支持此類業(yè)務(wù)。

          引擎級(jí)遠(yuǎn)程文件緩存

          當(dāng) ClickHouse 從本地磁盤文件系統(tǒng)讀取數(shù)據(jù)時(shí),如阿里云上 ECS 本地盤或者云盤,數(shù)據(jù)被 OS 緩存在 page cache 中,因此熱查詢會(huì)非常快。
          但是,如果ClickHouse正在從遠(yuǎn)程文件系統(tǒng)讀取,例如從 OSS 進(jìn)行數(shù)據(jù)讀取,則操作系統(tǒng)不會(huì)感知到這些讀取,且無法使用page cache。因此, ClickHouse 內(nèi)核層面實(shí)現(xiàn)了自己的引擎級(jí)別的 page cache。從 22.3 版本開始,ClickHouse 具有遠(yuǎn)程文件系統(tǒng)的緩存,緩存同時(shí)使用本地磁盤和 RAM,極大地提高了性能。

          在阿里云 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é)

          關(guān)注更多特性細(xì)節(jié)的小伙伴,可以到 ClickHouse 官網(wǎng)查看??偨Y(jié)來看ClickHouse仍然保持初心,通過輕量 Delete,JSON 數(shù)據(jù)類型及動(dòng)態(tài)子列,引擎緩存,以及物化視圖和 Projection 的支持,在 OLAP 場(chǎng)景實(shí)時(shí)分析性能方面持續(xù)奔跑,一騎絕塵。
          同時(shí)也可以看到在云原生數(shù)據(jù)庫成為主流演進(jìn)趨勢(shì)下,社區(qū)已經(jīng)開始進(jìn)行云原生的布局演進(jìn),從使用遠(yuǎn)程文件系統(tǒng)進(jìn)行存儲(chǔ)來支撐計(jì)算分離的落地就是很好的例證,相信后續(xù)會(huì)持續(xù)在云原生,Serverless 方面加快迭代。
          阿里云 ClickHouse V22.8 全托管版本已經(jīng)全域商業(yè)化,也是國內(nèi)首個(gè)提供 V22.8 全托管版本的產(chǎn)品服務(wù),同時(shí)我們也在云原生方面積極探索,現(xiàn)在已經(jīng)推出了正式商業(yè)化的 ClickHouse 云原生版本,歡迎各位 ClickHouser 學(xué)習(xí)體驗(yàn)。
            / End /  
          推薦閱讀


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

          瀏覽 45
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本一级片免费看 | 精品黄色| 亚洲欧美三级专区 | 蜜桃传媒在线观看网站 | 欧美肏屄视频在线观看 |