在磚使用物化視圖的SQL

預覽

這個特性是在公共預覽。注冊訪問,填寫這張表格

本文描述了如何創建和使用物化視圖在磚SQL來提高性能和降低成本的數據處理和分析工作負載。

物化視圖是什麼?

在磚的SQL,物化視圖是統一目錄管理表,允許用戶預先執行結果基於最新版本的源表中的數據。物化視圖在磚不同於其他實現返回的結果反映了國家的數據最後刷新物化視圖時,而不是總是更新當物化視圖查詢結果。您可以手動刷新物化視圖或進度刷新。

等數據處理工作負載的物化視圖是強大的提取、轉換和加載(ETL)處理,因為他們提供了一個簡單的聲明方式為合規流程數據,修正、聚合或一般變化數據捕獲(CDC)。物化視圖降低成本和提高查詢延遲並不是預先計算慢查詢和常用的計算。物化視圖也使易於使用的轉換清潔、豐富,denormalizing基表。物化視圖可以降低成本,同時提供一個簡化的終端用戶體驗,因為在某些情況下,他們可以從基表增量計算的變化。

物化視圖是第一個支持磚Lakehouse推出三角洲生活表。當您創建一個物化視圖DBSQL倉庫,δ生活表創建管道處理刷新物化視圖。您可以監視的狀態刷新UI操作在三角洲地區的生活表,三角洲生活表API, CLI或δ生活表。看到視圖刷新物化視圖的狀態

需求

  • 你必須使用統一Catalog-enabled工作區創建和刷新物化視圖。

  • 創建數據磚SQL物化視圖必須啟用您的帳戶使用serverless SQL倉庫

了解與磚SQL限製使用物化視圖時,看到的限製

創建物化視圖

創建物化視圖,使用創建物化視圖聲明。看到創建物化視圖在磚SQL參考。提交創建語句,您可以使用SQL編輯器磚的UI,磚SQL CLI,或者是磚的SQL API

請注意

的用戶創建一個物化視圖物化視圖的所有者,需要以下權限:

  • 選擇特權的物化視圖的基表引用。

  • 使用目錄使用模式目錄上的特權和模式包含物化視圖的源表。

  • 使用目錄使用模式特權在目標目錄和物化視圖模式。

  • 創建創建物化視圖包含物化視圖的模式上的特權。

下麵的示例創建物化視圖1/2 mv1從基表base_table1:

創建物化視圖1/2 mv1作為選擇日期,總和(銷售)作為sum_of_sales表1集團通過日期

物化視圖是如何形成的呢?

磚SQL的物化視圖創建操作使用磚SQL倉庫的創建和加載物化視圖中的數據。因為創建物化視圖是一個磚SQL倉庫同步操作,創建物化視圖命令塊,直到創建物化視圖和初始數據加載完成。δ生活表管道是每個磚自動創建SQL物化視圖。物化視圖時刷新更新,三角洲住表管道開始刷新過程。

刷新物化視圖

刷新操作刷新物化視圖,以反映最新的修改基本表。刷新物化視圖,使用刷新物化視圖聲明。看到刷新(物化視圖和流表)在磚SQL參考。提交一個更新語句,您可以使用SQL編輯器磚的UI,磚SQL CLI,或者是磚的SQL API

隻有所有者才能刷新物化視圖。

下麵的例子刷新1/2 mv1物化視圖:

刷新物化視圖1/2 mv1

磚SQL物化視圖刷新嗎?

磚SQL物化視圖使用的三角洲生活表刷新操作。當刷新物化視圖,一個更新δ生活表管道管理刷新物化視圖開始過程。

磚SQL物化視圖刷新是異步的。物化視圖刷新時,背景的工作開始在三角洲集群生活表和命令數據加載完成之前立即返回。

因為刷新由δ生活表管道、磚SQL的倉庫用來創建物化視圖是不習慣和不需要運行在刷新操作。

一些查詢可以增量刷新。看到物化視圖增量刷新。如果不能執行增量刷新,一個完整的執行刷新。

安排物化視圖刷新

您可以配置一個磚的SQL自動刷新物化視圖基於定義的時間表。您可以配置這個時間表時間表條款時創建物化視圖或添加的時間表改變觀點聲明。在創建表時,一個新的磚的工作是自動配置來處理更新。您可以查看日程安排任何時間描述擴展聲明。

更新物化視圖的定義

更新物化視圖的定義,您必須先刪除然後重新創建物化視圖。

刪除一個物化視圖

請注意

提交命令放棄物化視圖,你一定是物化視圖的所有者。

放棄一個物化視圖,使用刪除視圖聲明。提交一份下降語句,您可以使用SQL編輯器磚的UI,磚SQL CLI,或者是磚的SQL API。下麵的例子滴1/2 mv1物化視圖:

下降物化視圖1/2 mv1

描述一個物化視圖

檢索和數據類型的列的物化視圖,使用描述聲明。檢索列,數據類型和元數據,比如主人位置,創建時間,並刷新物化視圖狀態,使用描述擴展。提交一份描述語句,您可以使用SQL編輯器磚的UI,磚SQL CLI,或者是磚的SQL API

視圖刷新物化視圖的狀態

請注意

因為δ生活表管道管理物化視圖刷新,有引起管道的啟動時間延遲。這一次可能會在數秒到數分鍾內,除了執行刷新所需的時間。

您可以查看的狀態刷新物化視圖通過查看管道管理的物化視圖三角洲住表UI或通過查看刷新信息返回的描述擴展物化視圖命令。

視圖刷新UI狀態在三角洲地區的生活表

默認情況下,三角洲生活表管道管理一個物化視圖三角洲住表中不可見的UI。查看管道在三角洲地區的生活表界麵,你必須直接訪問鏈接到管道的管道的細節頁麵。訪問該鏈接:

  • 如果你提交刷新命令的SQL編輯器,按照鏈接的結果麵板。

  • 按照返回的鏈接描述擴展聲明。

  • 血統選項卡物化視圖,點擊管道然後單擊管道鏈接。

停止一個活躍的刷新

停止一個活躍的刷新,管道的細節頁麵在三角洲地區的生活表界麵,點擊停止管道停止更新。你也可以停止的刷新磚CLI或者是帖子. . / api / 2.0 /管道/ {pipeline_id} /停止管道的操作API。

控製對物化視圖的訪問

物化視圖支持豐富的訪問控製來支持數據共享,同時避免暴露潛在的私人數據。老板可以提供物化視圖選擇其他用戶的特權。用戶提供選擇對物化視圖不需要的訪問選擇訪問表引用的物化視圖。這種訪問控製使控製對底層數據的訪問時的數據共享。

權限授予一個物化視圖

授予訪問物化視圖,使用格蘭特聲明:

格蘭特privilege_type(,privilege_type]<mv_name>主要

privilege_type可以:

  • 選擇-用戶可以選擇物化視圖。

下麵的示例創建一個物化視圖和贈款選擇用戶權限:

創建MV < mv_name >為“選擇< base_table >”格蘭特選擇< mv_name >用戶

調用一個物化視圖的權限

撤銷訪問權從物化視圖,使用撤銷聲明:

撤銷privilege_type(,privilege_type]<的名字>主要

選擇特權物化視圖的基表上撤銷業主或任何用戶被授予選擇物化視圖特權,或基表被刪除,物化視圖所有者或用戶授予訪問仍能夠查詢物化視圖。然而,發生以下行為:

  • 物化視圖的所有者或其他用戶失去了再也不能訪問刷新物化視圖,物化視圖變得陳舊。

  • 如果自動設定一個時間表,下一個計劃刷新失敗或不運行。

以下示例中撤銷選擇的特權1/2 mv1:

撤銷選擇1/2 mv1user1;

物化視圖增量刷新

物化視圖總是返回定義查詢的語義正確的結果基於基表的最新版本的數據快照的時候最後刷新。在可能的情況下,結果是增量更新,但結果是相同的,將由完整的重新計算。

而任何查詢可以定義在一個物化視圖,隻有一個子集的查詢增量刷新。如果不能不斷刷新物化視圖,刷新過程使用一個完整的刷新。使用,以確定哪些模式,明白了確定使用增量或全部刷新

什麼類型的物化視圖增量刷新嗎?

下麵描述了表達式、關鍵字和條款支持增量刷新。

請注意

物化視圖,查詢特定類型的基表有一個更大範圍的增量刷新。看到(高級)定義物化視圖增量刷新

  • 物化視圖隻能單個表或執行一個查詢內心的加入聯盟所有(或組合內心的加入聯盟所有在多個表)。

  • 必須有一個的物化視圖集團通過頂級的條款。例如,table_a加入(table_b集團通過…)不是增量刷新。

  • 物化視圖選擇支持以下條款聚合函數>。不支持任何聚合函數不在這個列表:

    • 總和

  • 不支持增量刷新物化視圖,包括:

    • 窗口函數。

    • 條款。

    • 子查詢的選擇在哪裏條款。

    • 需要更改數據提要基表,除了某些先進的用例。看到允許改變數據提要

    • 函數用於創建物化視圖的查詢必須是確定的。例如,使用CURRENT_TIMESTAMP是不允許的。

    • 無法創建物化視圖使用三角洲湖時間旅行特性。

    • 加入年代和加入不支持。

允許改變數據提要

改變數據提要可以啟用設置的基表delta.enableChangeDataFeed表屬性使用下麵的語法:

改變表1TBLPROPERTIES(δenableChangeDataFeed=真正的)

改變數據提要對物化視圖在默認情況下不啟用。使改變數據提要磚中創建物化視圖的SQL,指定適當的表在創建時設置。如果你有一個現有的物化視圖,則必須刪除並重新創建它。

使更改數據以創建物化視圖在三角洲生活表,您(或管道所有者)必須修改三角洲生活表源代碼添加表屬性。

下麵的例子可以改變數據以物化視圖:

創建物化視圖<mv_name>TBLPROPERTIES(δenableChangeDataFeed=真正的)作為<查詢>

(高級)定義物化視圖增量刷新

下麵描述了先進的用例可以增量刷新物化視圖。不需要更改數據提要增量刷新在以下先進的用例。

請注意

下麵的限製仍然適用於這裏描述的用例:

  • 函數用於創建物化視圖的查詢必須是確定的。例如,使用CURRENT_TIMESTAMP是不允許的。

  • 無法創建物化視圖使用三角洲湖時間旅行特性。

  • 加入年代和加入不支持。

查詢與分區表

為了避免完全刷新物化視圖可以利用分區。當物化視圖的基表的分區鍵一樣,物化視圖可以探測到分區已經改變,隻修改分區的物化視圖實現所需的結果。對大型表來說,這可能會節省大量的時間和資源。

以下是表達式、關鍵字和條款,支持增量刷新在定義物化視圖與分區表。在下列情況下,物化視圖“co-partitioned”是一個基本表如果物化視圖股票至少一個與基表的分區鍵。

  • 一個分區的物化視圖可以查詢一個表。

    • 必須co-partitioned物化視圖的基表。

  • 可以做一個分區的物化視圖聯盟所有在多個表。

    • 物化視圖必須co-partitioned基表。

  • 一個分區可以使用一個物化視圖內心的加入事實表和維度表。

    • 物化視圖必須co-partitioned事實表。

    • 維度表不需要分區。如果檢測到一個更新的維度表,物化視圖完全刷新。

在表的查詢擴展

表的常見模式銅層僅是新行插入到表中。物化視圖自動檢測擴展基表,隻有新行插入增量刷新物化視圖。對大型表來說,這可能會節省大量的時間和資源。

以下是需要支持增量刷新在定義物化視圖之上擴展表:

  • 物化視圖隻能單個表或查詢內心的加入聯盟所有(或組合內心的加入聯盟所有在多個表)。

  • 基表必須擴展。

  • 如果一行更新或者刪除到物化視圖的基表通過一個外部係統,完全刷新物化視圖。

確定使用增量或全部刷新

物化視圖使用酶性能優化器選擇幾個當刷新物化視圖技術。酶是一種優化層,使用成本模型在選擇刷新物化視圖技術。下表描述了這些技術:

技術

增量刷新嗎?

描述

FULL_RECOMPUTE

沒有

物化視圖是完全重新計算

NO_OP

不適用

物化視圖是不更新的,因為未發現修改基本表。

ROW_BASEDPARTITION_OVERWRITE

是的

物化視圖增量更新使用指定的技術。

確定所使用的技術,查詢三角洲生活表事件日誌在哪裏event_type是'planning_information”:

選擇時間戳,消息event_log((<完全合格的MV的名字>))在哪裏event_type=“planning_information”訂單通過時間戳desc

限製

  • 如何管理和MVs上有限製,他們可以查詢:

    • 磚SQL創建物化視圖隻能和刷新在支持SQL倉庫和倉庫serverless SQL。

    • 磚SQL的物化視圖隻能從磚SQL查詢倉庫,三角洲生活表,和共享的集群運行磚運行時11.3或更高版本。你不能從單用戶查詢物化視圖訪問模式集群。

  • 物化視圖的基表必須注冊在統一目錄管理或外部表。

  • 磚的所有者SQL物化視圖不能被改變。

  • 物化視圖不支持身份列或代理鍵。

  • 你不能運行特設優化真空對物化視圖命令。

  • 如果一個物化視圖使用一筆總了隻能夠列和值保持在這一列,物化視圖合成聚合值為零,而不是

  • 雖然不需要列引用別名,non-column引用表達式需要一個別名。例如,以下語句是不允許的:選擇col1,總和(col2)t集團通過col1。相反,使用以下語句:選擇col1,總和(col2)作為sum_col2t集團通過col1

  • 你不能授予刷新許可的物化視圖權限物化視圖數據瀏覽器選項卡。

  • 底層文件從上遊支持物化視圖可能包括數據表(包括可能的個人身份信息)不出現在物化視圖的定義。這個數據是自動添加到底層存儲支持增量刷新物化視圖。因為底層文件的物化視圖可以從上遊風險暴露數據表不是物化視圖模式的一部分,磚建議不要與不可信共享底層存儲下遊消費者。例如,假設一個物化視圖的定義包括一個計數(不同的field_a)條款。盡管物化視圖定義隻包括聚合截然不同的條款,底層文件將包含一個列表的實際值field_a