全部產品
Search
文件中心

:自動化治理-物化視圖

更新時間:Mar 13, 2025

當您在面對巨量資料計算任務頻繁且存在大量相似子查詢情境時,DataWorks支援自動化治理,智能推薦物化視圖,為您提供了一種智能化、自動化的解決方案。當您啟用此功能時,DataWorks能夠自動識別和分類MaxCompute中的相似子查詢,並產生物化視圖推薦,您可以按需一鍵產生物化視圖,從而顯著提升計算效率和節省計算資源。

功能介紹

DataWorks自動化治理中的物化視圖功能依託於MaxCompute的物化視圖推薦與管理能力,可快速掃描識別DataWorks調度情境下MaxCompute SQL中存在的大量相似子查詢,並基於這些相似子查詢推薦檢視窗產生SQL用於快速建立物化視圖。

視圖建立完成後,DataWorks將同步建立產出視圖資料的節點並發布至生產環境調度中,DataWorks上原存在相似子查詢的下遊節點將統一掛載在產出視圖資料的節點下,依靠調度依賴關係,DataWorks會優先調度產出視圖資料的節點,當下遊節點使用公用子查詢時,從已產生資料的物化視圖中查詢,以此減少資料的重複計算,達到治理目的。

支援地區:華東1(杭州)、華東2(上海)、華南1(深圳)、華北2(北京)、西南1(成都)。

前提條件

使用流程

  1. 開啟物化視圖推薦。

    DataWorks資料開發模組中綁定的MaxCompute專案,開啟物化視圖推薦後,當需要滿足以下條件時,將會在物化視圖推薦頁面產生物化視圖推薦。

    • 周期任務至少連續運行3天以上。

    • 公用子查詢中的輸入資料量大於1,000,000行。

    • 公用子查詢中需要包含JOIN或AGG(彙總,Aggregation)等涉及資料重組計算的運算子。

  2. 查看物化視圖推薦和建立物化視圖。

    您可以查看並判斷其物化視圖推薦是否合理,進行物化視圖的建立治理任務。

    如果建立物化視圖時,配置了建立物化視圖重新整理節點增加物化視圖任務依賴,則物化視圖建立成功後,將會在DataWorks調度情境下生效。

    在具備相似計算的節點任務前,自動新增一個可動態重新整理的物化視圖節點,當原表任務或上遊節點產出後,先進行物化視圖重新整理,產出最新資料,下遊節點再從此物化視圖中擷取資料。

  3. 管理物化視圖。

    您可以管理本空間通過物化視圖推薦建立的物化視圖,查看本工作空間下物化視圖的命中情況,對生效情況不符合預期的物化視圖進行詳情分析或刪除。

操作步驟

步驟一:開啟和停用物化視圖推薦

說明

開啟和停用物化視圖推薦需要工作空間管理員進行操作。

  1. 進入資料治理中心頁面。

  2. 登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的資料開發與治理 > 資料治理中心,在右側頁面中單擊進入資料治理中心

  3. 單擊頂部治理工作台,然後在左側導覽列單擊物化視圖

  4. 選擇工作空間後,單擊物化視圖推薦設定,在需要開啟智能物化視圖推薦項目後開啟智能推薦開關。

    image

步驟二:查看物化視圖推薦

該模組能夠自動識別可建立的物化視圖,以及其關聯的計算任務,相關責任人可判定其是否合理,進行物化視圖的建立治理。

重要

為了更精準地產生物化視圖推薦,開啟物化視圖推薦後,需要滿足以下條件,才能在物化視圖推薦頁面查看到相關推薦。

  • 周期任務至少連續運行3天以上。

  • 公用子查詢中的輸入資料量大於1,000,000行。

  • 公用子查詢中需要包含JOIN或AGG(彙總,Aggregation)等涉及資料重組計算的運算子。

  1. 在的頂部切換工作空間,然後單擊物化視圖推薦頁簽。

  2. 修改所屬專案分析時間區間等篩選條件,查看是否有可推薦的物化檢視窗產生項。

    如果在分析時間區間存在可推薦的物化檢視窗產生項,可查看如下資訊。

    image

    關鍵參數說明:

    • 物化視圖推薦列顯示的物化視圖推薦任務標識包含公用子查詢的摘要資訊。格式:Aggregate: xx; Inputs: xx, xx;,其中:

      • Aggregate:表示推薦的公用子查詢是否包含彙總操作。

      • Inputs:列出公用子查詢使用的所有源表表名稱。

    • 可影響SQL數:當前公用子查詢被多少其他任務作業使用。

    • 可影響節點數:當前公用子查詢被多少調度節點使用。

    • 推薦程度:基於子查詢的重複次數、複雜度、輸入記錄數計算推薦程度。

  3. 單擊物化視圖推薦列的任務標識,查看子查詢的詳細資料(源表資訊、涉及的公用子查詢以及相關作業調度任務)。

    image

步驟三:建立物化視圖

  1. 結合實際業務需要與推薦詳情,在物化視圖推薦頁面,選擇是否建立物化視圖。如需建立,單擊操作列的建立物化視圖

  2. 建立物化視圖頁面配置物化視圖的具體參數。image

    1. 配置項-建立物化視圖:根據輸入任務的共同子查詢,建立物化視圖節點並生產物化視圖。

      參數

      說明

      輸入表

      自動擷取,無需修改。

      是否建立物化視圖

      首次建立時,預設為建立物化視圖,無需修改。

      說明

      如果已存在相同輸入表的物化視圖,則可按需配置選擇已有物化視圖

      物化視圖名稱

      自訂。

      生命週期

      支援1天7天自訂天數

      重新整理方式

      物化視圖的重新整理方式。

      • 固定時間間隔重新整理

        當讀取的表在DataWorks有產出任務時,預設選擇時間管理cron模式,如沒有產出任務,固定時間重新整理。

      • 時間管理Cron模式

        產出的具體時間預設為讀取的上遊表的產出節點最近產出的時間。

      • 不重新整理

      執行語句預覽

      查看物化視圖的SQL語句預覽。

    2. (可選)配置項-建立物化視圖重新整理節點:建立可動態重新整理物化視圖節點,原表任務產出後即可動態執行物化視圖重新整理,物化最新資料。

      配置物化視圖節點重新整理名稱節點運行逾時時間image

    3. (可選)配置項-增加物化視圖任務依賴:對具備相似計算的節點任務,增加物化視圖節點任務為上遊調度依賴節點,以提高增量資料的查詢命中率。image

      該地區展示涉及的計算任務,包括本空間和其它空間的任務節點個數。你可以單擊查看詳情,查看具體的任務節點詳情。

      image

  3. 單擊建立並執行,等待DataWorks自動建立物化視圖,您可以在物化視圖推薦頁面的操作狀態列查看建立狀態,或單擊操作列的查看詳情查看具體建立進度。

    • 操作狀態包括:

      • 待建立:未通過DataWorks發起物化視圖建立。

      • 已建立:物化視圖建立成功。

      • 建立中:已通過DataWorks發起物化視圖建立流程,但尚未執行完成。

      • 建立失敗:已通過DataWorks發起物化視圖建立流程,但中途出現建立失敗的情況。

    • 查看詳情,展示物化視圖建立詳情。

      image

如果在建立物化視圖時,配置了建立物化視圖重新整理節點增加物化視圖任務依賴,則在對應的任務流程中,具備相似計算的節點任務前,將新增一個物化視圖重新整理節點,該節點的責任人為建立物化視圖的建立人。

步驟四:管理物化視圖

您可以管理本空間通過物化視圖推薦建立的物化視圖,查看本工作空間下物化視圖的命中情況,對未按預期生效的物化視圖進行詳情分析或刪除。

  1. 在頂部切換工作空間,然後單擊物化視圖管理頁簽。

  2. 修改所屬專案等篩選條件,查看已通過物化視圖推薦建立的物化視圖。

    image

    重要

    如果您MaxCompute專案的配額(Quota)為隨用隨付模式,則:總節約計算量=計算輸入資料量×SQL複雜度。MaxCompute SQL作業按照計算量×單價收取費用。詳情請參見計算費用(隨用隨付)

    • 您可以單擊物化視圖列的物化視表徵圖識,查看物化視圖詳情。

      image

    • 您可以單擊操作列的刪除,刪除物化視圖。

配置樣本

說明

本樣本使用的測試資料來自MaxCompute公用資料集,具體請參見TPC-DS資料,實際使用時,請使用您的業務資料相關表進行配置。

資料準備

  1. 綁定MaxCompute計算資源並在資料開發 > 計算資源中將其綁定。

  2. 在資料開發中建立虛擬節點Materialized_View_Test,作為下遊任務的根節點。

  3. 在資料開發中按照樣本分別建立四個ODPS節點。

    其中,dws_customer_info_1dws_customer_info_2存在公用子查詢,從ods_mc_tpc_customerods_mc_tpc_customer_address擷取資料。

    ods_mc_tpc_customer

    調度參數參數名bday參數值$[yyyymmdd]

    CREATE TABLE IF NOT EXISTS ods_mc_tpc_customer
    (
        c_customer_sk           BIGINT NOT NULL
        ,c_customer_id          CHAR(16) NOT NULL
        ,c_current_cdemo_sk     BIGINT
        ,c_current_hdemo_sk     BIGINT
        ,c_current_addr_sk      BIGINT
        ,c_first_shipto_date_sk BIGINT
        ,c_first_sales_date_sk  BIGINT
        ,c_salutation           CHAR(10)
        ,c_first_name           CHAR(20)
        ,c_last_name            CHAR(30)
        ,c_preferred_cust_flag  CHAR(1)
        ,c_birth_day            BIGINT
        ,c_birth_month          BIGINT
        ,c_birth_year           BIGINT
        ,c_birth_country        VARCHAR(20)
        ,c_login                CHAR(13)
        ,c_email_address        CHAR(50)
        ,c_last_review_date_sk  CHAR(10)
    )
    COMMENT 'TABLE COMMENT'
    PARTITIONED BY (ds STRING COMMENT '分區')
    LIFECYCLE 90;
    
    SET odps.namespace.schema=TRUE;
    INSERT OVERWRITE TABLE ods_mc_tpc_customer PARTITION(ds='${bday}')
    select * from BIGDATA_PUBLIC_DATASET.TPCDS_10T.customer;

    ods_mc_tpc_customer_address

    調度參數參數名bday參數值$[yyyymmdd]

    CREATE TABLE IF NOT EXISTS ods_mc_tpc_customer_address
    (
        ca_address_sk           BIGINT NOT NULL
        ,ca_address_id          CHAR(16) NOT NULL
        ,ca_street_number       CHAR(10)
        ,ca_street_name         VARCHAR(60)
        ,ca_street_type         CHAR(15)
        ,ca_suite_number        CHAR(10)
        ,ca_city                VARCHAR(60)
        ,ca_county              VARCHAR(30)
        ,ca_state               CHAR(2)
        ,ca_zip                 CHAR(10)
        ,ca_country             VARCHAR(20)
        ,ca_gmt_offset          DECIMAL(5,2)
        ,ca_location_type       CHAR(20)
    )
    COMMENT 'TABLE COMMENT'
    PARTITIONED BY (ds STRING COMMENT '分區')
    LIFECYCLE 90;
    
    SET odps.namespace.schema=TRUE;
    INSERT OVERWRITE TABLE ods_mc_tpc_customer_address PARTITION(ds='${bday}')
    select * from BIGDATA_PUBLIC_DATASET.TPCDS_10T.customer_address;

    dws_customer_info_1

    調度參數參數名bday參數值$[yyyymmdd]

    CREATE TABLE IF NOT EXISTS dws_customer_info_1
    (
        c_customer_sk           BIGINT NOT NULL
        ,c_customer_id          CHAR(16) NOT NULL
        ,c_first_name           CHAR(20)
        ,c_last_name            CHAR(30)
        ,c_email_address        CHAR(50)
        ,ca_suite_number        CHAR(10)
        ,ca_city                VARCHAR(60)
        ,ca_county              VARCHAR(30)
        ,ca_state               CHAR(2)
    )
    COMMENT 'TABLE COMMENT'
    PARTITIONED BY 
    (
        ds                      STRING COMMENT '分區'
    )
    LIFECYCLE 90
    ;
    
    INSERT OVERWRITE TABLE dws_customer_info_1 PARTITION (ds = '${bday}')
    SELECT  t02.c_customer_sk
            ,t02.c_customer_id
            ,t02.c_first_name
            ,t02.c_last_name
            ,t02.c_email_address
            ,t03.ca_suite_number
            ,t03.ca_city
            ,t03.ca_county
            ,t03.ca_state
    FROM    (
                SELECT  *
                FROM    ods_mc_tpc_customer_address 
                WHERE   ds = '${bday}'
            ) t03
    JOIN    (
                SELECT  *
                FROM    ods_mc_tpc_customer
                WHERE   ds = '${bday}'
            ) t02
    ON      t03.ca_address_sk = t02.c_current_addr_sk
    ;

    dws_customer_info_2

    調度參數參數名bday參數值$[yyyymmdd]

    CREATE TABLE IF NOT EXISTS dws_customer_info_2
    (
        c_customer_sk           BIGINT NOT NULL
        ,c_customer_id          CHAR(16) NOT NULL
        ,c_first_name           CHAR(20)
        ,c_last_name            CHAR(30)
        ,c_email_address        CHAR(50)
        ,ca_suite_number        CHAR(10)
        ,ca_city                VARCHAR(60)
        ,ca_county              VARCHAR(30)
        ,ca_state               CHAR(2)
    )
    COMMENT 'TABLE COMMENT'
    PARTITIONED BY 
    (
        ds                      STRING COMMENT '分區'
    )
    LIFECYCLE 90
    ;
    
    INSERT OVERWRITE TABLE dws_customer_info_2 PARTITION (ds = '${bday}')
    SELECT  t02.c_customer_sk
            ,t02.c_customer_id
            ,t02.c_first_name
            ,t02.c_last_name
            ,t02.c_email_address
            ,t03.ca_suite_number
            ,t03.ca_city
            ,t03.ca_county
            ,t03.ca_state
    FROM    (
                SELECT  *
                FROM    ods_mc_tpc_customer_address 
                WHERE   ds = '${bday}'
            ) t03
    JOIN    (
                SELECT  *
                FROM    ods_mc_tpc_customer
                WHERE   ds = '${bday}'
            ) t02
    ON      t03.ca_address_sk = t02.c_current_addr_sk
    ;
  4. 儲存提交,發布到生產環境後,可以在營運中心看到周期任務流程如下:

    image

開啟物化視圖

  1. MaxCompute中開啟物化視圖智能分析。詳情請參見物化視圖推薦與管理

  2. 在DataWorks治理中心中開啟物化視圖推薦。詳情請參見步驟一:開啟和停用物化視圖推薦

  3. 等待周期任務運行三天以上後,在DataWorks治理中心中查看物化視圖推薦。

    說明

    本樣本使用的測試資料為TPC-DS資料的10T資料規格,滿足物化視圖推薦要求,如果您在物化視圖推薦中未查看到已產生的推薦,請查看您的資料是否符合推薦要求:

    • 周期任務至少連續運行3天以上。

    • 公用子查詢中的輸入資料量大於1,000,000行。

    • 公用子查詢中需要包含JOIN或AGG(彙總,Aggregation)等涉及資料重組計算的運算子。

    image

建立物化視圖

  1. 單擊物化視圖推薦操作列的建立物化視圖。詳情請參見步驟三:建立物化視圖

    image

    說明

    預設已選中建立物化視圖重新整理節點增加物化視圖任務依賴,無需修改。

  2. 單擊建立並執行,您可以在物化視圖推薦頁簽,查看建立詳情。

    image

  3. 物化視圖建立成功後,即可在下一次調度任務中看到,重複的子查詢將從物化視圖重新整理節點中查詢。

    image

相關文檔