本文介紹將湖倉一體1.0外部項目存量作業遷移至湖倉一體2.0外部Schema不同情境的修改方法。並說明使用湖倉一體2.0開啟專案層級中繼資料支援的Schema開關和SQL文法支援的Schema開關後,存量作業的相容情況。
湖倉一體1.0的外部項目(簡稱:外部項目1.0)功能及用法不再發展,且會收斂下線。如果繼續使用MaxCompute訪問聯邦資料來源,建議將聯邦方案升級至湖倉一體2.0。
背景資訊
湖倉一體1.0支援使用外部項目聯邦DLF+OSS、HMS+HDFS兩種資料來源。外部項目1.0中表的上一級即為專案,使用專案層級與DLF的Database或Hive的Database映射。
聯邦DLF+OSS資料湖的外部項目1.0直接包含串連資訊,MaxCompute引擎通過外部項目1.0的屬性對接DLF中繼資料和OSS資料。
對於HMS+HDFS Hadoop執行個體,通過抽象出外部資料源(Foreign Server)對象儲存串連資訊訪問執行個體。MaxCompute引擎依賴外部資料源讀取Hive中繼資料和資料。
湖倉一體1.0與湖倉一體2.0對比
當前湖倉一體1.0的聯邦方式存在一些限制,針對這些問題湖倉一體2.0作出了相應最佳化,對比項如下表所示:
對比項 | 湖倉一體1.0 | 湖倉一體2.0 |
外部資料源 | 外部資料來源物件在不同聯邦情境下不統一,沒有抽象外部資料源不利於租戶面資源共用和許可權控制。 | 抽象出統一的外部資料源(Foreign Server),更利於租戶面許可權和資料面許可權分離,便於共用和許可權管理。 |
專案模式 | 專案內即是表,與更常見的 為了映射資料來源的表的上一級的管理對象(例如DLF的Database、Hologres的Schema),需要建立大量的外部項目。 | 專案升級為支援Schema模式,可以建立或將存量的 |
計算方式 | 外部項目1.0雖是專案層級的對象,但必須依賴一個數倉專案才可以執行計算任務,進而增加跨專案資料訪問授權複雜性。 | 湖倉一體2.0推出外部Schema(External Schema),以映射資料來源表對象上一級的層次。同時外部Schema使用歸屬的數倉專案計算資源進行計算。 |
內外部映射關係 |
|
|
外部資料源的建立和新外部項目的建立詳情,請參見湖倉一體2.0使用指南。
支援Schema模式及相容性影響說明
MaxCompute支援開啟Schema功能,分為專案級中繼資料支援的Schema開關和SQL文法支援的Schema開關兩個開關。
專案級中繼資料支援的Schema開關
開關開啟後不支援回退關閉,且開啟後原專案中的其他任務,以及訪問此專案都可能會存在相容性變化,需謹慎操作。
專案層析結構變化
專案級中繼資料支援的Schema模式開啟後,專案層析結構為
Project.Schema.Table;Schema模式關閉時,專案層析結構為
Project.Table。
訪問自訂Schema資料
若需要訪問自訂Schema下的資料,需要開啟SQL文法支援的Schema模式,否則只能訪問DEFAULT Schema下的資料。
內建Schema
每個專案下會內建有一個名稱為Default的Schema,且不可自訂單獨刪除。
操作步驟
登入MaxCompute控制台,在左上方選擇地區。
在左側導覽列,選擇。
在项目管理頁面,單擊目標專案操作列的升级到支持Schema层级。
SQL文法支援的Schema開關
SQL文法支援的Schema存在兩個不同層級,Session層級和租戶層級。二者作用範圍不同,詳情如下:
Session層級設定
僅影響當前Session的語義,優先順序高於租戶層級設定,可通過SET odps.namespace.schema= true | false;命令開啟或關閉SQL文法支援的Schema模式。
租戶層級設定
租戶級SQL文法支援的Schema模式開啟後,需注意以下情況:
所有任務不用再加Session層級文法開關,且建立的專案預設為中繼資料支援Schema模式。
所有專案均支援SQL文法支援的Schema模式,且開啟後不支援回退關閉。
如果專案中存量任務以SQL文法支援的Schema模式運行不相容時,開啟此開關會造成存量任務運行失敗。因此,建議先Session層級開啟SQL文法支援的Schema模式,驗證通過後,再開啟租戶級SQL文法支援的Schema模式。
操作步驟
登入MaxCompute控制台,在左上方選擇地區。
在左側導覽列,選擇 。
在租户管理頁面,單擊租户属性頁簽。
如果當前租戶下沒有任何專案
在租户属性頁簽,開啟租户级Schema语法开关。
如果當前租戶下有專案
不允許也不建議修改。
關於開啟租戶級Schema詳情,請參見租戶屬性。
相容性影響
若湖倉一體2.0專案級中繼資料支援的Schema模式與SQL文法支援的Schema模式,開啟或關閉的狀態不一致,會產生相容錯誤。
對於均未開啟專案層級中繼資料支援的Schema模式與SQL文法支援的Schema模式的數倉專案(層析結構為:project(p).table(t)),在存量任務可正常啟動並執行背景下:
當數倉專案開啟中繼資料支援的Schema模式
或者對數倉專案中的查詢任務開啟SQL文法支援的Schema模式
若原查詢任務的SQL運算式不變,直接運行可能產生相容性報錯,詳情如下表所示。
Schema功能狀態 | 任務類型 | 相容情況 | 修改建議 |
| 存量任務 |
|
|
新任務 |
| 無需修改。 | |
| 存量任務 |
| 無需修改。 |
新任務 |
說明 目前狀態下,不支援訪問自訂Schema,也不支援使用 | 無需修改。 | |
| 存量任務 |
|
|
新任務 | 按照支援Schema模式和文法規則使用。 | 無需修改。 |
遷移說明
根據不同情境,選擇存量專案或建立新專案開啟專案級中繼資料支援的Schema開關。開啟後會自動產生一個Default Schema,該專案下所有的內部表會歸屬到Default下。關於更多Schema介紹,詳情請參見Schema和Schema操作。
開啟專案層級中繼資料支援的Schema模式後不支援關閉,且開啟後原專案中的其他任務,以及訪問此專案都可能會存在相容性變化,需謹慎操作。關於Schema相容性介紹詳情,請參見支援Schema模式及相容性影響說明。
在已開啟中繼資料支援的Schema模式的專案中建立外部Schema。可以根據資料來源類型查看相應的建立詳情,請參見湖倉一體2.0使用指南。
建議外部Schema名稱與外部項目的名稱一致。
情境一:在運行存量任務的專案中建立並訪問外部Schema中的資料
情景假設:運行存量任務的專案為Project(p1),查詢外部項目為
external_project(e).table(t)。經過上述步驟改造後,聯邦資料來源已經重新對應的層析結構為project (p1).external_schema(e).table(t)。若存量任務為
SELECT * FROM e.t;開啟SQL文法支援的Schema開關後,
e.t的層析結構被解析為external_schema(e).table(t),在專案Project(p1)中可正常運行無需修改。若未開啟SQL文法支援的Schema開關後,存量任務
SELECT * FROM e.t;中e.t的層析結構將被解析為project (e).table(t),會查詢名稱為e的內部或外部項目,與重新對應的層析結構不一致,存量訪問任務將報錯。
若Project(p1)關聯外部項目進行資料查詢。例如:
SELECT * FROM e.t1 JOIN p1.t2;。開啟SQL文法支援的Schema開關後,會將
p1.t2中的p1解析為Schema層級,因此需要將SQL修改為:SELECT * FROM e.t1 JION p1.default.t2;。
情境二:跨專案建立並訪問外部Schema中的資料
情景假設:運行存量任務的專案為Project(p1),外部項目層析結構為
external_project(e).table(t)。由於Project(p1)不適合開啟中繼資料支援的Schema模式,可重新選擇或建立專案Project(p2)進行上述步驟改造。經過改造後,聯邦資料來源重新對應的層析結構為project (p2).external_schema(e).table(t)。Project(p1)中存量任務,例如:
SELECT * FROM e.t;,開啟SQL文法支援的Schema開關後,需要將SQL修改為:SELECT * FROM p2.e.t;。若上述任務在Project(p2)中運行,則無需修改。
跨專案進行外部Schema和數倉專案的關聯查詢時,如果在Project(p1)下運行
SELECT * FROM e.t1 JOIN p1.t2;,雖然Project(p1)未開啟中繼資料支援的Schema模式,但是開啟了SQL文法支援的Schema模式,查詢p1.t2還是會在Project(p1)下查詢Schema(p1),因此需要將SQL修改為:SELECT * FROM p2.e.t1 JOIN p1.default.t2;。

