日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ClickHouse 技术系列】- ClickHouse 聚合函数和聚合状态

發布時間:2024/8/23 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ClickHouse 技术系列】- ClickHouse 聚合函数和聚合状态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介:本文翻譯自 Altinity 針對 ClickHouse 的系列技術文章。面向聯機分析處理(OLAP)的開源分析引擎 ClickHouse,因其優良的查詢性能,PB級的數據規模,簡單的架構,被國內外公司廣泛采用。本系列技術文章,將詳細展開介紹 ClickHouse。

前言

本文翻譯自 Altinity 針對 ClickHouse 的系列技術文章。面向聯機分析處理(OLAP)的開源分析引擎 ClickHouse,因其優良的查詢性能,PB 級的數據規模,簡單的架構,被國內外公司廣泛采用。

阿里云 EMR-OLAP 團隊,基于開源 ClickHouse 進行了系列優化,提供了開源 OLAP 分析引擎 ClickHouse 的云上托管服務。EMR ClickHouse 完全兼容開源版本的產品特性,同時提供集群快速部署、集群管理、擴容、縮容和監控告警等云上產品功能,并且在開源的基礎上優化了 ClickHouse 的讀寫性能,提升了 ClickHouse 與 EMR 其他組件快速集成的能力。訪問 ClickHouse - E-MapReduce - 阿里云 了解詳情。

譯者:何源(荊杭),阿里云計算平臺事業部高級產品專家

ClickHouse 聚合函數和聚合狀態

ClickHouse 可能有一個獨特的功能——聚合狀態(除了聚合函數外)。你可以參考 ?和 ?組合子的文檔。

簡而言之,許多數據庫使用概率數據結構,例如 HyperLogLog(簡稱 HLL)。它用于唯一/去重計算,你可以在Spark、ElasticSearch、Flink、Postgres、BigQuery 和 Redis 等服務中看到它的效果。但通常你只能在聚合函數中應用此函數一次,例如查詢每月唯一用戶數——得到一個數字,這樣就知足了。由于 HLL 結構沒有對應的內部格式,因此無法重用預聚合或部分聚合的數據。而在 ClickHouse 中,你可以這樣做,因為 HLL 結構是一致的。

ClickHouse 的速度非常快,其基本思路是處理原始數據而不是預聚合數據。但是讓我們做個實驗。例如,我們需要為上個月的唯一用戶數計算一些指標。

設想:每天預聚合,然后匯總所有結果。這就是所謂的存儲空間方法——以后你可以只匯總最后 30 個測量值來計算上個月的統計數據,或者只匯總最后 7 個測量值來計算上周的統計數據。

創建我們的預聚合表:

create table events_unique (date Date, group_id String, client_id String, event_type String, product_id String, value AggregateFunction(uniq, String) ) ENGINE = MergeTree(date, (group_id, client_id, event_type, product_id, date), 8192);

這里將我的聚合聲明為 AggregateFunction(uniq, String)。我們關注的是一些獨特的指標,這些指標是在 String 列上計算的(為了進一步優化,你可能應該使用 FixedString 或二進制數據)。

讓我們將數據插入預聚合表:

INSERT INTO events_unique SELECT date, group_id, client_id, event_type, product_id, uniqState(visitor_id) AS value FROM events GROUP BY date, group_id, client_id, event_type, product_id;

進行冒煙測試,確認其可以正常運行:

SELECT uniqMerge(value) FROM events_unique GROUP BY product_id;

現在讓我們比較原始表和預聚合表的查詢性能。原始查詢:

SELECT uniq(visitor_id) AS c FROM events WHERE client_id = ‘aaaaaaaa’ AND event_type = ‘click’ AND product_id = ‘product1’ AND date >= ‘2017–01–20’ AND date < ‘2017–02–20’;┌──────c─┐ │ 457954 │ └────────┘ 1 rows in set. Elapsed: 0.948 sec. Processed 13.22 million rows, 1.61 GB (13.93 million rows/s., 1.70 GB/s.)

預聚合表的結果:

SELECT uniqMerge(value) AS c FROM events_unique WHERE client_id = ‘aaaaaaaa’ AND event_type = ‘click’ AND product_id = ‘product1’ AND date >= ‘2017–01–20’ AND date < ‘2017–02–20’;┌──────c─┐ │ 457954 │ └────────┘ 1 rows in set. Elapsed: 0.050 sec. Processed 39.39 thousand rows, 8.55 MB (781.22 thousand rows/s., 169.65 MB/s.)

結果表明,我們的處理時間縮短到 1/20。

在實踐中,將物化視圖與 AggregatingMergeTree 引擎結合使用,會比使用單獨的表更方便。

總結

ClickHouse 可讓你將聚合狀態存儲在數據庫中,而不僅僅是存儲在業務應用中,這有望帶來頗具吸引力的性能優化和新用例。有關更多詳細信息,請查看關于 AggregatingMergeTree 引擎的豐富文檔。

后續

您已經了解了在 ClickHouse 中處理實時更新相關內容,本系列還包括其他內容:

  • 在 ClickHouse 中處理實時更新
  • 使用新的 TTL move,將數據存儲在合適的地方
  • 在 ClickHouse 物化視圖中使用 Join
  • ClickHouse 聚合函數和聚合狀態(本文)
  • ClickHouse 中的嵌套數據結構

原文鏈接
本文為阿里云原創內容,未經允許不得轉載。?

總結

以上是生活随笔為你收集整理的【ClickHouse 技术系列】- ClickHouse 聚合函数和聚合状态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。