全部產品
Search
文件中心

MaxCompute:湖倉一體1.0外部項目遷移為湖倉一體2.0外部schema方案

更新時間:Jan 07, 2026

本文介紹將湖倉一體1.0外部項目存量作業遷移至湖倉一體2.0外部Schema不同情境的修改方法。並說明使用湖倉一體2.0開啟專案層級中繼資料支援的Schema開關和SQL文法支援的Schema開關後,存量作業的相容情況。

重要

湖倉一體1.0的外部項目(簡稱:外部項目1.0)功能及用法不再發展,且會收斂下線。如果繼續使用MaxCompute訪問聯邦資料來源,建議將聯邦方案升級至湖倉一體2.0

背景資訊

湖倉一體1.0支援使用外部項目聯邦DLF+OSSHMS+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),更利於租戶面許可權和資料面許可權分離,便於共用和許可權管理。

專案模式

專案內即是表,與更常見的Project.Schema.Table層析的資料來源不匹配。

為了映射資料來源的表的上一級的管理對象(例如DLF的Database、Hologres的Schema),需要建立大量的外部項目。

專案升級為支援Schema模式,可以建立或將存量的Project.Table層析替換為Project.Schema.Table層析,以匹配更多資料庫、巨量資料生態的資料來源。

計算方式

外部項目1.0雖是專案層級的對象,但必須依賴一個數倉專案才可以執行計算任務,進而增加跨專案資料訪問授權複雜性。

湖倉一體2.0推出外部Schema(External Schema),以映射資料來源表對象上一級的層次。同時外部Schema使用歸屬的數倉專案計算資源進行計算。

內外部映射關係

image.png

image.png

說明

外部資料源的建立和新外部項目的建立詳情,請參見湖倉一體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,且不可自訂單獨刪除。

  • 操作步驟

    1. 登入MaxCompute控制台,在左上方選擇地區。

    2. 在左側導覽列,選擇管理配置 > 项目管理

    3. 项目管理頁面,單擊目標專案操作列的升级到支持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模式。

  • 操作步驟

    1. 登入MaxCompute控制台,在左上方選擇地區。

    2. 在左側導覽列,選擇管理配置 > 租户管理 。

    3. 租户管理頁面,單擊租户属性頁簽。

      • 如果當前租戶下沒有任何專案

        租户属性頁簽,開啟租户级Schema语法开关

      • 如果當前租戶下有專案

        不允許也不建議修改。

關於開啟租戶級Schema詳情,請參見租戶屬性

相容性影響

若湖倉一體2.0專案級中繼資料支援的Schema模式與SQL文法支援的Schema模式,開啟或關閉的狀態不一致,會產生相容錯誤。

對於均未開啟專案層級中繼資料支援的Schema模式與SQL文法支援的Schema模式的數倉專案(層析結構為:project(p).table(t)),在存量任務可正常啟動並執行背景下:

  • 當數倉專案開啟中繼資料支援的Schema模式

  • 或者對數倉專案中的查詢任務開啟SQL文法支援的Schema模式

若原查詢任務的SQL運算式不變,直接運行可能產生相容性報錯,詳情如下表所示。

Schema功能狀態

任務類型

相容情況

修改建議

  • 未開啟中繼資料支援的Schema模式

  • 開啟SQL文法支援的Schema模式

存量任務

  • 若存量任務是...FROM tt的層析結構將被解析為current_project(p).table(t),文法相容。

  • 若存量任務是...FROM p.tp.t的層析結構將被解析為current_project.schema(p).table(t),而資料位元於project(p).table(t)下,並不存在Schema(p)層析,因此會報錯。

  • 無需修改。

  • 建議修改為:...FROM p.default.t

新任務

  • 若新任務寫成p.default.t,將被解析為project(p).schema(default).table(t)

  • 若新任務寫成default.t,將被解析為current_project.schema(default).table(t)

  • 若新任務寫成t,將被解析為 current_project.current_schema.table(t)

  • 若新任務寫成p.s.t,將被解析為project(p).schema(s).table(t),若Project(p)專案下並沒有Schema(s)層析,將報錯找不到對應的Schema(s)。

無需修改。

  • 開啟中繼資料支援的Schema模式

  • 未開啟SQL文法支援的Schema模式

存量任務

  • 若存量任務是...FROM tt的層析結構將被解析為current_project(p).schema(default).table(t),文法相容。

  • 若存量任務是...FROM p.tp.t的層析結構將被解析為project(p).schema(default).table(t),系統將自動補全Default Schema層級,從而確保文法的相容性。

無需修改。

新任務

  • 若新任務寫成p.t,將被解析為project(p).schema(default).table(t),系統將自動補全Default Schema層級。

  • 若新任務寫成t,將被解析為project.schema(default).table(t),系統將自動補全Default Schema層級。

說明

目前狀態下,不支援訪問自訂Schema,也不支援使用USE SCHEMA <schema_name>

無需修改。

  • 開啟中繼資料支援的Schema模式

  • 開啟SQL文法支援的Schema模式

存量任務

  • 若存量任務是...FROM tt的層析結構將被解析為current_project(p).schema(default).table(t),文法相容。

  • 若存量任務是...FROM p.tp.t的層析結構將被解析為current_project.schema(p).table(t),而資料位元於project(p).table(t)下,並不存在Schema(p)層析,因此會報錯。

  • 情境一:無需修改。

  • 情境二:建議修改...FROM p.default.t

新任務

按照支援Schema模式和文法規則使用。

無需修改。

遷移說明

  • 根據不同情境,選擇存量專案或建立新專案開啟專案級中繼資料支援的Schema開關。開啟後會自動產生一個Default Schema,該專案下所有的內部表會歸屬到Default下。關於更多Schema介紹,詳情請參見SchemaSchema操作

  • 開啟專案層級中繼資料支援的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;