自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

物化視圖在 MaxCompute 中的探索與實(shí)踐

大數(shù)據(jù) 數(shù)據(jù)倉庫
物化視圖(Materialized View,以下簡稱 MV)是將查詢結(jié)果預(yù)先計(jì)算并存儲(chǔ)的一種特殊的物理表,當(dāng)執(zhí)行相關(guān)查詢時(shí),可以自動(dòng)復(fù)用預(yù)計(jì)算結(jié)果,提高查詢性能。物化視圖作為一種查詢加速器,在云計(jì)算和大數(shù)據(jù)時(shí)代有著廣泛的用途。今天和大家分享物化視圖在 MaxCompute 的實(shí)踐。

一、MaxCompute 和物化視圖

MaxCompute 是一個(gè)多功能、高性能、易使用的企業(yè)級(jí)的數(shù)據(jù)倉庫服務(wù),已經(jīng)為阿里巴巴集團(tuán)提供服務(wù)達(dá) 14 年。目前每日 DML 的任務(wù)數(shù)超過了 2,600 萬,單日的數(shù)據(jù)量規(guī)模達(dá)到 EB 級(jí),服務(wù)集團(tuán)內(nèi)用戶 4W+。在如此大的體量之下,也暴露出幾個(gè)問題:隨著業(yè)務(wù)的規(guī)模越來越大,重復(fù)計(jì)算越來越多,消耗了大量資源;對于計(jì)算結(jié)果的產(chǎn)出時(shí)效有了更高要求;通過大批量改造腳本來進(jìn)行數(shù)據(jù)治理的成本高,難度大。最終物化視圖成為解決以上問題的最佳方案。

與普通視圖(Virtual View)不同,物化視圖存儲(chǔ)的是查詢結(jié)果的物理副本,而普通視圖僅僅是一個(gè)虛擬的表,它在查詢時(shí)才動(dòng)態(tài)地生成結(jié)果。物化視圖的發(fā)展歷史與數(shù)據(jù)庫技術(shù)的進(jìn)步緊密相關(guān)。以下是物化視圖發(fā)展的一些關(guān)鍵階段。

圖片

  • 早期數(shù)據(jù)庫階段:早期的數(shù)據(jù)庫系統(tǒng)中,并沒有物化視圖的概念。數(shù)據(jù)庫主要關(guān)注于數(shù)據(jù)的存儲(chǔ)和基本的查詢操作。
  • RDBMS 視圖階段:視圖允許用戶通過 SQL 語句定義一個(gè)虛擬表,這個(gè)虛擬表是基于一個(gè)或多個(gè)實(shí)際表的查詢結(jié)果。然而,早期的視圖通常是非物化的,即它們在查詢時(shí)才計(jì)算結(jié)果。
  • RDBMS 物化視圖階段:物化視圖的概念在 20 世紀(jì) 90 年代初期被提出。物化視圖將查詢結(jié)果實(shí)際存儲(chǔ)在數(shù)據(jù)庫中,這樣用戶就可以像訪問普通表一樣訪問物化視圖,而不需要每次都執(zhí)行復(fù)雜的查詢。隨著數(shù)據(jù)庫技術(shù)的發(fā)展,物化視圖的性能優(yōu)化和自動(dòng)化管理成為研究的重點(diǎn)。數(shù)據(jù)庫管理系統(tǒng)(DBMS)提供了更多的功能來優(yōu)化物化視圖的性能,如增量更新、自動(dòng)更新、并行處理等。
  • 云原生大數(shù)據(jù)物化視圖階段:在云計(jì)算和大數(shù)據(jù)時(shí)代,物化視圖的作用變得更加重要和普遍。基于云計(jì)算幾乎無限的可擴(kuò)展性,物化視圖可以適應(yīng)更大的數(shù)據(jù)集;實(shí)時(shí)計(jì)算引擎提高了物化視圖的更新頻率和更新效率;自動(dòng)化和編排工具使得物化視圖的創(chuàng)建、管理和刷新變得簡單;云計(jì)算通常是按需付費(fèi)模式,物化視圖節(jié)約了計(jì)算資源,實(shí)現(xiàn)降本增效;物化視圖可以作為數(shù)據(jù)質(zhì)量的檢查點(diǎn),監(jiān)控?cái)?shù)據(jù)質(zhì)量。

物化視圖的優(yōu)點(diǎn)如下:

  • 提高查詢性能:對于復(fù)雜的查詢,由于物化視圖存儲(chǔ)了查詢結(jié)果,對于頻繁執(zhí)行的查詢,可以直接從物化視圖中讀取數(shù)據(jù),而不需要每次都執(zhí)行完整的查詢,從而提高了查詢效率。
  • 保持?jǐn)?shù)據(jù)一致性:物化視圖可以定期刷新,以確保數(shù)據(jù)的一致性。在數(shù)據(jù)變化不頻繁的情況下,這可以減少數(shù)據(jù)同步的開銷。
  • 應(yīng)急查詢:物化視圖允許用戶在數(shù)據(jù)庫服務(wù)器關(guān)閉或網(wǎng)絡(luò)連接中斷時(shí),仍然可以訪問和分析數(shù)據(jù)。

物化視圖也有一些缺點(diǎn):

  • 存儲(chǔ)空間:物化視圖需要額外的存儲(chǔ)空間來保存查詢結(jié)果。
  • 數(shù)據(jù)更新:如果底層數(shù)據(jù)頻繁變動(dòng),物化視圖需要定期刷新,這可能會(huì)增加維護(hù)成本。
  • 復(fù)雜性:對于某些復(fù)雜的查詢,物化視圖可能難以實(shí)現(xiàn)或者維護(hù)。

二、物化視圖的設(shè)計(jì)和實(shí)現(xiàn)

圖片

在物化視圖的設(shè)計(jì)階段,我們關(guān)注物化視圖的創(chuàng)建、維護(hù)和應(yīng)用。

1. 如何創(chuàng)建物化視圖

MaxCompute 支持創(chuàng)建普通物化視圖、分區(qū)物化視圖、聚簇物化視圖和穿透物化視圖,具體的創(chuàng)建方式體現(xiàn)在建表語句中,PARTITIONED BY (col_name) 語句指定創(chuàng)建物化視圖表為分區(qū)表,CLUSTERED BY (col_name) SORTED BY (col_name [ASC | DESC])INTO number_of_buckets BUCKETS 語句指定創(chuàng)建物化視圖為聚簇表。

圖片

在物化視圖創(chuàng)建的過程中有兩個(gè)關(guān)鍵點(diǎn),第一個(gè)是需要建立一個(gè)基表到物化視圖的索引,這樣在查詢時(shí)就能快速地獲取到相關(guān)的物化視圖。第二個(gè)是基表數(shù)據(jù)版本保存,在物化視圖的元數(shù)據(jù)中需要保存對應(yīng)基表的數(shù)據(jù)版本;另外對于分區(qū)物化視圖,要求分區(qū)物化視圖的分區(qū)列和基表保持一致,這樣的話,可以實(shí)現(xiàn)分區(qū)級(jí)的增量更新。

圖片

2. 如何維護(hù)物化視圖

MaxCompute 通過建表語句中的 TBLPROPERTIES 指定是否開啟自動(dòng)刷新,刷新時(shí)間間隔和分區(qū)增量刷新:

  • "enable_auto_substitute"="true", --指定當(dāng)分區(qū)不存在時(shí)是否轉(zhuǎn)化視圖來查詢。
  • "enable_auto_refresh"="true", --指定是否開啟自動(dòng)刷新。
  • "refresh_interval_minutes"="120", --指定刷新時(shí)間間隔。
  • "only_refresh_max_pt"="true" --針對分區(qū)物化視圖,只自動(dòng)刷新源表最新分區(qū)。

圖片

3. 如何使用物化視圖實(shí)現(xiàn)加速查詢

自動(dòng)查詢改寫:自動(dòng)查詢改寫通過四個(gè)步驟實(shí)現(xiàn),第一步,利用基表到 MV 的索引去獲取相關(guān)物化視圖;第二步是命中預(yù)判定,假如一個(gè)基表關(guān)聯(lián)的 MV 的數(shù)目太多的話,通過命中預(yù)判定,以便盡早過濾無效的物化視圖;第三步是把物化視圖注冊到優(yōu)化器中;第四步是改寫校驗(yàn)及執(zhí)行,這主要包括的是基于 CALCITE 改寫規(guī)則的二次開發(fā),其中包含了一系列的校驗(yàn),包括字段校驗(yàn)、謂詞校驗(yàn)、關(guān)聯(lián)校驗(yàn)以及分組和聚合校驗(yàn)等,通過這些校驗(yàn)來判斷查詢字段、查詢條件、關(guān)聯(lián)條件、分組和聚合條件等是否與物化視圖一致,從而決定是否能用物化視圖改寫查詢。

比如一個(gè)查詢 SQL 是:

SELECT ds, count(uid) as pv
FROM users
WHERE ds>=‘20230501’ AND ds<=‘20230507’
GROUP BY ds;

物化視圖為:

SELECT ds, count(uid) as pv
FROM users
WHERE ds>=‘20230401’
GROUP BY ds;

查詢改寫后的 SQL 就變成了:

SELECT ds, pv
FROM mv
WHERE ds>=‘20230501’ AND ds<=‘20230507’ ;

自動(dòng)查詢改寫是基于 SPJG 的匹配。匹配會(huì)自動(dòng)忽略空格、換行、注釋、別名等影響,除此之外查詢 SQL 與物化視圖 SQL 不完全相同的場景下,自動(dòng)查詢改寫會(huì)嘗試改寫查詢 SQL,補(bǔ)償物化視圖 SQL 和查詢 SQL 之間缺少的計(jì)算動(dòng)作,比如當(dāng) SQL 查詢的 SELECT 列與物化視圖 SQL 的 SELECT 列不完全相同時(shí),自動(dòng)查詢改寫對 SELECT 列支持情況如下:

  • 支持查詢 SQL 的 SELECT 列的順序與物化視圖 SQL 不同。
  • 支持物化視圖 SQL 中的 SELECT 列沒有出現(xiàn)在查詢 SQL 中。
  • 支持查詢 SQL 中的 SELECT 列不在物化視圖 SQL 的 SELECT 列中,但是可以由物化視圖 SQL 的 SELECT 列組合計(jì)算得到。
  • 不支持查詢 SQL 中的 SELECT 列不在物化視圖 SQL 的 SELECT 列中,且無法由物化視圖 SQL 的 SELECT 列組合計(jì)算得到。

自動(dòng)穿透:自動(dòng)穿透的關(guān)鍵是區(qū)分物化數(shù)據(jù)和非物化數(shù)據(jù)。通過 SQL 解析后的執(zhí)行計(jì)劃,確定查詢 SQL 的目標(biāo)分區(qū),然后去 MV 里面看相應(yīng)的分區(qū)是否得到了物化,如果存在沒有物化的分區(qū),就將該分區(qū)轉(zhuǎn)化為視圖去執(zhí)行。比如有個(gè)查詢 SQL 是:select key from src where ds >= ‘20230530’group by key,存在一個(gè)按天增量的 MV 只有 20230601 到 20230605 的數(shù)據(jù),自動(dòng)穿透功能會(huì)直接讀取 20230601到 20230605 已物化的分區(qū),并將未物化的分區(qū) 20230530 和 20230531 轉(zhuǎn)化為視圖執(zhí)行,最后將兩部分?jǐn)?shù)據(jù) UNION ALL 起來。自動(dòng)穿透既節(jié)省了存儲(chǔ),又實(shí)現(xiàn)了靈活擴(kuò)展。

圖片

三、智能推薦及自動(dòng)物化視圖

物化視圖在推廣的過程中存在以下三個(gè)問題:

  • 用戶的 SQL 能力有限,對于物化視圖的了解有限,無法很好利用。
  • 用戶具備相應(yīng) SQL 水平,但是不具備全局視角,無法確定哪些重復(fù)計(jì)算應(yīng)該建立物化視圖。
  • 不能準(zhǔn)確衡量物化視圖的價(jià)值,就不具備大規(guī)模的宣傳和推廣的動(dòng)力。

針對以上三個(gè)問題,MaxCompute 通過智能推薦和自動(dòng)物化的方法降低物化視圖的創(chuàng)建難度,提高用戶使用體驗(yàn)。

1. 智能推薦

通過對執(zhí)行任務(wù)進(jìn)行分析,智能選擇資源消耗大、任務(wù)耗時(shí)長、使用頻率高、預(yù)期收益大的 SQL 進(jìn)行語句拆分和合并,提取出公共表達(dá)式,基于公共表達(dá)式構(gòu)建物化視圖。在任務(wù)運(yùn)行時(shí)選擇匹配率高的物化視圖進(jìn)行推薦,比如:

  • 優(yōu)先全匹配,當(dāng)不存在全匹配的物化視圖時(shí)才會(huì)嘗試選擇需要進(jìn)行補(bǔ)償?shù)奈锘晥D。
  • 當(dāng)有多個(gè)需要進(jìn)行補(bǔ)償?shù)奈锘晥D時(shí),查詢 SQL 涉及的表與物化視圖涉及的表匹配的數(shù)量越多,優(yōu)先級(jí)越高。
  • 當(dāng)有多個(gè)需要進(jìn)行補(bǔ)償?shù)奈锘晥D與查詢 SQL 涉及的表匹配數(shù)量相同時(shí),根據(jù)物化視圖的數(shù)據(jù)存儲(chǔ)大小作為優(yōu)先級(jí)標(biāo)準(zhǔn),物化視圖的數(shù)據(jù)存儲(chǔ)大小越小,優(yōu)先級(jí)越高。

2. 自動(dòng)物化視圖

在自動(dòng)物化視圖的實(shí)現(xiàn)中,有三個(gè)關(guān)鍵點(diǎn):

  • 在線物化,利用延遲物化能力,先不生成數(shù)據(jù),等到 SQL 執(zhí)行時(shí)再生成數(shù)據(jù)。
  • QUATA 限制:物化視圖不能沒有限制的隨意生成,我們會(huì)敲定一個(gè)配額,只有占用存儲(chǔ)在這個(gè)閾值之內(nèi),才會(huì)自動(dòng)生成物化視圖。
  • 收集反饋,根據(jù)反饋結(jié)果對物化視圖進(jìn)行迭代,只保留有價(jià)值的物化視圖。用戶可在 CONSOLE 頁面,一站式生成和查看物化視圖。

四、總結(jié)和展望

MaxCompute 物化視圖的功能概覽如下圖所示:

圖片

我們針對業(yè)界產(chǎn)品做了一個(gè)分析,對比 MaxCompute 與 Hive、Spark、Snowflake、RedShift、BigQuery 等產(chǎn)品的物化視圖功能,如下所示。

圖片

可以看到,MaxCompute 中的物化視圖的功能還是很全的,囊括了分區(qū)、聚簇、查詢改寫、延時(shí)物化、穿透、自動(dòng)生成和自動(dòng)更新等功能。

MaxCompute 物化視圖在淘天業(yè)務(wù)線的應(yīng)用效果如下:

圖片

在淘天業(yè)務(wù)線上,目前創(chuàng)建了超 5 千個(gè)物化視圖,優(yōu)化的查詢?nèi)蝿?wù)超 2 萬。優(yōu)化后的查詢平均資源的消耗降低了 20% 以上,甚至有一些查詢消耗降低了 80%。目前自動(dòng)物化視圖這個(gè)功能還在灰度中,預(yù)計(jì)最終可以創(chuàng)建超 10 萬個(gè)物化視圖,查詢的覆蓋范圍可以達(dá)到 50 萬,預(yù)計(jì)將節(jié)省 14% 的 CU 資源。

最后是對未來工作的展望。

圖片

未來,我們還將在以下方面進(jìn)行完善:

  • 增量更新:雖然現(xiàn)在已經(jīng)實(shí)現(xiàn)分區(qū)級(jí)的增量更新,可以滿足大部分批處理的場景要求,但是對于更新頻率要求更高的場景,更新的粒度還有待細(xì)化。
  • 基于事件觸發(fā)更新:目前支持定時(shí)刷新、手動(dòng)刷新和分區(qū)增量刷新,未來希望可以做到基于事件的更新。
  • 擴(kuò)展外表的使用場景:湖倉一體的時(shí)代,大量的數(shù)據(jù)都存儲(chǔ)在 OSS 和 HDFS 上,物化視圖也可以作為一個(gè)外部數(shù)據(jù)的緩存去使用。
  • 擴(kuò)展查詢改寫算子:自動(dòng)查詢改寫這塊還有很大的擴(kuò)展空間,比如擴(kuò)展對 LEFT OUTER/RIGHT OUTER JOIN 的支持,擴(kuò)展對 GROUP BY、HAVING、ORDER BY、LIMIT 和聚合函數(shù)表達(dá)式的支持。
責(zé)任編輯:姜華 來源: DataFunTalk
相關(guān)推薦

2009-05-06 11:09:10

Oracle物化視圖數(shù)據(jù)庫

2022-04-28 09:36:47

Redis內(nèi)存結(jié)構(gòu)內(nèi)存管理

2025-01-15 09:16:10

2024-12-05 12:01:09

2010-05-04 10:20:17

Oracle物化視圖

2024-02-29 09:17:43

數(shù)據(jù)中心

2022-04-14 10:29:57

機(jī)器學(xué)習(xí)時(shí)間技術(shù)

2009-11-17 15:59:25

Oracle物化視圖

2024-12-26 09:27:51

2024-12-18 10:03:30

2010-07-30 17:46:46

DB2物化視圖

2023-05-15 07:42:10

2022-04-07 16:50:28

FlinkB站Kafka

2021-05-20 09:55:23

Apache Flin阿里云大數(shù)據(jù)

2010-08-02 13:25:23

DB2物化視圖

2022-08-21 21:28:32

數(shù)據(jù)庫實(shí)踐

2009-11-17 16:47:09

Oracle物化視圖日

2024-10-23 20:09:47

2010-11-19 10:11:49

Oracle物化視圖
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)